diff options
author | Kuan-Wei Chiu <visitorckw@gmail.com> | 2024-06-12 12:48:13 +0800 |
---|---|---|
committer | Kuan-Wei Chiu <visitorckw@gmail.com> | 2024-06-12 12:48:13 +0800 |
commit | 0c9d8e5929c819c0e4de6930065b383843ba8d58 (patch) | |
tree | 15f32ee3871fc71b7cefb72e9d86746d125f6e16 /src/hashmap.c | |
parent | 75c3fa91dcf2998a2f103d76fc4e0339f6263f5e (diff) | |
download | afl++-0c9d8e5929c819c0e4de6930065b383843ba8d58.tar.gz |
Fix undefined behavior by casting to uint64_t before left shift
According to the C standard, left-shifting a value by an amount greater than or equal to the width of its promoted type results in undefined behavior. To prevent potential unexpected results, explicitly cast the uint8_t variable type to uint64_t before performing the left shift operation by 56 bits. This ensures the operation is well-defined and adheres to the standard. Fixes: 40df85d1 ("adjust cmplog header")
Diffstat (limited to 'src/hashmap.c')
-rw-r--r-- | src/hashmap.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/hashmap.c b/src/hashmap.c index a0a9283c..5834802f 100644 --- a/src/hashmap.c +++ b/src/hashmap.c @@ -59,7 +59,7 @@ static inline unsigned int hash(uint64_t key) { bool hashmap_search_and_add(uint8_t type, uint64_t key) { if (unlikely(type >= 8)) return false; - uint64_t val = (key & 0xf8ffffffffffffff) + (type << 56); + uint64_t val = (key & 0xf8ffffffffffffff) + ((uint64_t)type << 56); unsigned int index = hash(val); HashNode *node = _hashmap->table[index]; while (node) { |