mirror of
https://https.git.savannah.gnu.org/git/gnulib.git
synced 2026-09-01 02:34:55 +00:00
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.
This commit is contained in:
committed by
Bruno Haible
parent
cd053975e1
commit
ab089716f1
@@ -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-09 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
verify: port ‘assume’ to C23 non-GCC
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user