mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 04:00:07 +08:00
PR29170, divide by zero displaying fuzzed .debug_names
PR 29170 * dwarf.c (display_debug_names): Don't attempt to display bucket clashes when bucket count is zero.
This commit is contained in:
@ -10149,32 +10149,35 @@ display_debug_names (struct dwarf_section *section, void *file)
|
|||||||
bucket_count),
|
bucket_count),
|
||||||
buckets_filled, (unsigned long) bucket_count);
|
buckets_filled, (unsigned long) bucket_count);
|
||||||
|
|
||||||
uint32_t hash_prev = 0;
|
if (bucket_count != 0)
|
||||||
size_t hash_clash_count = 0;
|
|
||||||
size_t longest_clash = 0;
|
|
||||||
size_t this_length = 0;
|
|
||||||
size_t hashi;
|
|
||||||
for (hashi = 0; hashi < name_count; hashi++)
|
|
||||||
{
|
{
|
||||||
const uint32_t hash_this = hash_table_hashes[hashi];
|
uint32_t hash_prev = 0;
|
||||||
|
size_t hash_clash_count = 0;
|
||||||
if (hashi > 0)
|
size_t longest_clash = 0;
|
||||||
|
size_t this_length = 0;
|
||||||
|
size_t hashi;
|
||||||
|
for (hashi = 0; hashi < name_count; hashi++)
|
||||||
{
|
{
|
||||||
if (hash_prev % bucket_count == hash_this % bucket_count)
|
const uint32_t hash_this = hash_table_hashes[hashi];
|
||||||
|
|
||||||
|
if (hashi > 0)
|
||||||
{
|
{
|
||||||
++hash_clash_count;
|
if (hash_prev % bucket_count == hash_this % bucket_count)
|
||||||
++this_length;
|
{
|
||||||
longest_clash = MAX (longest_clash, this_length);
|
++hash_clash_count;
|
||||||
|
++this_length;
|
||||||
|
longest_clash = MAX (longest_clash, this_length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this_length = 0;
|
||||||
}
|
}
|
||||||
else
|
hash_prev = hash_this;
|
||||||
this_length = 0;
|
|
||||||
}
|
}
|
||||||
hash_prev = hash_this;
|
printf (_("Out of %lu items there are %zu bucket clashes"
|
||||||
|
" (longest of %zu entries).\n"),
|
||||||
|
(unsigned long) name_count, hash_clash_count, longest_clash);
|
||||||
|
assert (name_count == buckets_filled + hash_clash_count);
|
||||||
}
|
}
|
||||||
printf (_("Out of %lu items there are %zu bucket clashes"
|
|
||||||
" (longest of %zu entries).\n"),
|
|
||||||
(unsigned long) name_count, hash_clash_count, longest_clash);
|
|
||||||
assert (name_count == buckets_filled + hash_clash_count);
|
|
||||||
|
|
||||||
struct abbrev_lookup_entry
|
struct abbrev_lookup_entry
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user