summaryrefslogtreecommitdiff
path: root/include/utils
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2015-08-22 14:27:03 -0700
committerNick Kralevich <nnk@google.com>2015-08-24 15:52:22 +0000
commit1f286989986a384e34d9de1acf8899439506695a (patch)
treeca15d9ff0bce7642a7b479002867cac5d0063b15 /include/utils
parent3b94cef1b75893f98ad3011a09582405bb32baf4 (diff)
libutils: cleanups for -fsanitize=integer
* Hashing functions rely on integer overflow behavior. Mark those functions as safe. * abort() if a passed in size_t value is greater than UINT32_MAX. This can occur on 64 bit builds where size_t is larger than uint32_t. * Special case the index lookup for an empty sorted vector. Without the special case, size() == 0, and size()-1 underflows. Change-Id: I343a14b589fc8f0d221c1998ae5d6f0b9e2781f8
Diffstat (limited to 'include/utils')
-rw-r--r--include/utils/JenkinsHash.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/utils/JenkinsHash.h b/include/utils/JenkinsHash.h
index 7da5dbd6a..027c10c7e 100644
--- a/include/utils/JenkinsHash.h
+++ b/include/utils/JenkinsHash.h
@@ -29,6 +29,9 @@ namespace android {
/* The Jenkins hash of a sequence of 32 bit words A, B, C is:
* Whiten(Mix(Mix(Mix(0, A), B), C)) */
+#ifdef __clang__
+__attribute__((no_sanitize("integer")))
+#endif
inline uint32_t JenkinsHashMix(uint32_t hash, uint32_t data) {
hash += data;
hash += (hash << 10);