hashtable: fix environment variable corruption

Only first previously deleted entry was recognized, leading hsearch_r
to think that there was no previously deleted entry. It then conluded
that a free entry was found, even if there were no free entries and it
overwrote a random entry.

This patch makes sure all deleted or free entries are always found and
also introduces constants for the 0 and -1 numbers. Unit tests to excersise a
simple hash table usage and catch the corruption were added.

To trash your environment, simply run this loop:

setenv i 0
while true; do
    setenv v_$i $i
    setenv v_$i
    setexpr i $i + 1
done

Signed-off-by: Roman Kapl <rka@sysgo.com>
This commit is contained in:
Roman Kapl
2019-01-30 11:39:54 +01:00
committed by Tom Rini
parent 4d9dbb1fbb
commit 9dfdbd9f0c
3 changed files with 136 additions and 3 deletions

1
test/env/Makefile vendored
View File

@@ -4,3 +4,4 @@
obj-y += cmd_ut_env.o
obj-y += attr.o
obj-y += hashtable.o