diff options
author | Neil Moore <neil@s-z.org> | 2013-10-16 11:50:59 -0400 |
---|---|---|
committer | Neil Moore <neil@s-z.org> | 2013-10-16 11:55:48 -0400 |
commit | f2b8b55cca63307837bfdcffa1c0545458b444a4 (patch) | |
tree | cce290e56bad9e9d3fad7a5caa0014301c562d3c /crawl-ref/source/random.h | |
parent | 978670c681321dbe9878572e35dfd3295b3b5e02 (diff) | |
download | crawl-ref-f2b8b55cca63307837bfdcffa1c0545458b444a4.tar.gz crawl-ref-f2b8b55cca63307837bfdcffa1c0545458b444a4.zip |
Don't crash when shuffling length-0 vectors (xFleury)
If the vector is empty, &vec[0] is undefined behaviour, and MSVC does
bounds-checking by default.
Diffstat (limited to 'crawl-ref/source/random.h')
-rw-r--r-- | crawl-ref/source/random.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/crawl-ref/source/random.h b/crawl-ref/source/random.h index 471b43d974..93bc60c3f0 100644 --- a/crawl-ref/source/random.h +++ b/crawl-ref/source/random.h @@ -120,7 +120,9 @@ void shuffle_array(T* arr, int n) template <typename T> void shuffle_array(vector<T> &vec) { - shuffle_array(&vec[0], vec.size()); + // &vec[0] is undefined behaviour, and vec.data() is C++11-only. + if (vec.size() > 0) + shuffle_array(&vec[0], vec.size()); } /** |