Bug #7828
closedutil/hash: unexpected remove behavior
Description
In util-hash.c I have observed some behavior that is unexpected and likely incorrect. To see this behavior, create a hash table 32 entries wide and use the default hash function. Then add a short string “abc”, observe the string is stored properly. Now remove a string “iln”, and observe string “abc” is no longer in the table.
Other scenarios can provoke this behavior but this is possibly the simplest way. It occurs because if the table slot has one entry, remove does not perform a compare before removal.
I have a unit test patch to show this, and a fix patch to make it behave as a typical hash table would behave. The behavior goes back to at least 6.0 and continues into the current 8.0.1 work branch.
I am working on a PR now.
Updated by Philippe Antoine about 2 months ago
- Related to Bug #7475: Problem in HashTable remove function added
Updated by Juliana Fajardini Reichow about 2 months ago
PR for review: https://github.com/OISF/suricata/pull/13633
Updated by Juliana Fajardini Reichow about 2 months ago
- Assignee changed from OISF Dev to Charles Vigue
Assigning to the author as there's already a PR :)
Updated by Charles Vigue about 2 months ago
PR is here: https://github.com/OISF/suricata/pull/13639
Updated by Shivani Bhardwaj about 2 months ago
- Related to deleted (Bug #7475: Problem in HashTable remove function)
Updated by Shivani Bhardwaj about 2 months ago
- Has duplicate Bug #7475: Problem in HashTable remove function added
Updated by Philippe Antoine 19 days ago
- Status changed from New to Closed
- Target version changed from TBD to 8.0.1
Updated by Victor Julien 2 days ago
- Subject changed from Unexpected remove behavior in util-hash to util/hash: unexpected remove behavior