summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/random.h
diff options
context:
space:
mode:
authorNeil Moore <neil@s-z.org>2013-10-16 11:50:59 -0400
committerNeil Moore <neil@s-z.org>2013-10-16 11:55:48 -0400
commitf2b8b55cca63307837bfdcffa1c0545458b444a4 (patch)
treecce290e56bad9e9d3fad7a5caa0014301c562d3c /crawl-ref/source/random.h
parent978670c681321dbe9878572e35dfd3295b3b5e02 (diff)
downloadcrawl-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.h4
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());
}
/**