[09/19] libctf: fix dynset insertion

Message ID 20240730153707.168357-10-nick.alcock@oracle.com
State New
Headers
Series libctf: various bugfixes (including a write into freed memory), and loosen constraints on enums |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply

Commit Message

Nick Alcock July 30, 2024, 3:36 p.m. UTC
  libctf's dynsets are a straight wrapper around libiberty hashtab, storing
the key directly in the hashtab slot.  However, we'd often like to be able
to store 0 and 1 (HTAB_EMPTY_ENTRY and HTAB_DELETED_ENTRY) in there, so we
move them out of the way and replace them with huge unlikely values
instead.  Unfortunately we failed to do this replacement in one place, so
insertion of 0 or 1 ended up misinforming the hashtab machinery that an
entry was empty or deleted when it wasn't.

libctf/
	* ctf-hash.c (ctf_dynset_insert): Call key_to_internal properly.
---
 libctf/ctf-hash.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Patch

diff --git a/libctf/ctf-hash.c b/libctf/ctf-hash.c
index a52f96db105..7f291e3ac27 100644
--- a/libctf/ctf-hash.c
+++ b/libctf/ctf-hash.c
@@ -626,7 +626,7 @@  ctf_dynset_insert (ctf_dynset_t *hp, void *key)
   struct htab *htab = (struct htab *) hp;
   void **slot;
 
-  slot = htab_find_slot (htab, key, INSERT);
+  slot = htab_find_slot (htab, key_to_internal (key), INSERT);
 
   if (!slot)
     {