[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] hamt: fix technically undefined behavior
From: |
Marc Nieper-Wißkirchen |
Subject: |
[PATCH] hamt: fix technically undefined behavior |
Date: |
Fri, 12 Aug 2022 16:04:34 +0200 |
Bug reported by Bruno Haible in
<https://lists.gnu.org/r/bug-gnulib/2022-04/msg00023.html>.
* lib/hamt.c (entry_insert): Remove technically undefined
behavior when shifting an integer of N bits by N or more bits.
---
ChangeLog | 8 ++++++++
lib/hamt.c | 5 +++++
2 files changed, 13 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index ccf4acd03..0d04cb70e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2022-08-12 Marc Nieper-Wißkirchen <marc@nieper-wisskirchen.de>
+
+ hamt: fix technically undefined behavior
+ Bug reported by Bruno Haible in
+ <https://lists.gnu.org/r/bug-gnulib/2022-04/msg00023.html>.
+ * lib/hamt.c (entry_insert): Remove technically undefined
+ behavior when shifting an integer of N bits by N or more bits.
+
2022-08-10 Paul Eggert <eggert@cs.ucla.edu>
stdckdint: fix dependency
diff --git a/lib/hamt.c b/lib/hamt.c
index 2b07cf23b..be9712561 100644
--- a/lib/hamt.c
+++ b/lib/hamt.c
@@ -680,6 +680,11 @@ entry_insert (const struct function_table *functions,
Hamt_entry *entry,
Hamt_entry *new_entry = copy_entry (*elt_ptr);
if (replace)
*elt_ptr = NULL;
+ /* We have to take this shortcut as shifting an integer of N
+ bits by N or more bits triggers undefined behavior.
+ See:
https://lists.gnu.org/archive/html/bug-gnulib/2022-04/msg00023.html. */
+ if (depth >= _GL_HAMT_MAX_DEPTH)
+ return (Hamt_entry *) create_populated_bucket (new_entry, copy_entry
(entry));
return create_populated_subtrie (new_entry, copy_entry (entry), hash,
(hash_element (functions, entry)
>> (5 * depth)), depth);
--
2.34.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] hamt: fix technically undefined behavior,
Marc Nieper-Wißkirchen <=