libcutils: cleanups for -fsanitize=integer

Hash functions rely on overflow behavior, so whitelist them.

ATRACE_TAG_NOT_READY: use an unsigned constant when shifting bits.
Otherwise, the value overflows on shift. The users of this constant
assign it to a uint64_t variable.

Change-Id: I21c437ce2083525e906c3ead3259ec34a1ef4b66
This commit is contained in:
Nick Kralevich 2015-08-26 10:40:00 -07:00
parent 0ac29519ac
commit 7390478f19
3 changed files with 11 additions and 1 deletions

View File

@ -71,7 +71,7 @@ __BEGIN_DECLS
#define ATRACE_TAG_LAST ATRACE_TAG_PACKAGE_MANAGER
// Reserved for initialization.
#define ATRACE_TAG_NOT_READY (1LL<<63)
#define ATRACE_TAG_NOT_READY (1ULL<<63)
#define ATRACE_TAG_VALID_MASK ((ATRACE_TAG_LAST - 1) | ATRACE_TAG_LAST)

View File

@ -77,6 +77,9 @@ Hashmap* hashmapCreate(size_t initialCapacity,
/**
* Hashes the given key.
*/
#ifdef __clang__
__attribute__((no_sanitize("integer")))
#endif
static inline int hashKey(Hashmap* map, void* key) {
int h = map->hash(key);
@ -152,6 +155,10 @@ void hashmapFree(Hashmap* map) {
free(map);
}
#ifdef __clang__
__attribute__((no_sanitize("integer")))
#endif
/* FIXME: relies on signed integer overflow, which is undefined behavior */
int hashmapHash(void* key, size_t keySize) {
int h = keySize;
char* data = (char*) key;

View File

@ -42,6 +42,9 @@ static bool str_eq(void *key_a, void *key_b)
}
/* use djb hash unless we find it inadequate */
#ifdef __clang__
__attribute__((no_sanitize("integer")))
#endif
static int str_hash_fn(void *str)
{
uint32_t hash = 5381;