about summary refs log tree commit diff
path: root/src/hashmap.c
diff options
context:
space:
mode:
authorKuan-Wei Chiu <visitorckw@gmail.com>2024-06-12 12:48:13 +0800
committerKuan-Wei Chiu <visitorckw@gmail.com>2024-06-12 12:48:13 +0800
commit0c9d8e5929c819c0e4de6930065b383843ba8d58 (patch)
tree15f32ee3871fc71b7cefb72e9d86746d125f6e16 /src/hashmap.c
parent75c3fa91dcf2998a2f103d76fc4e0339f6263f5e (diff)
downloadafl++-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.c2
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) {