From 51027cabe1a102e9063084106f9db23bacaebc80 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 28 Nov 2023 16:53:45 -0500 Subject: [PATCH] Fix GC-after-free with multiple hash resizes --- src/builtins/search.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/builtins/search.c b/src/builtins/search.c index 2eac975f..13d4ed47 100644 --- a/src/builtins/search.c +++ b/src/builtins/search.c @@ -728,7 +728,8 @@ void hashmap_set(B* vars, B w, B x) { HashMap* map = c(HashMap, vars[2]); u64* hp = map->a; u64 sh = map->sh; if (map->pop>>(64-3-sh)>7 || hp[map->sz-1]!=empty) { // keep load <= 7/8 - map=hashmap_resize(map); + vars[2] = bi_N; // hashmap_resize might free then alloc + map = hashmap_resize(map); vars[2] = tag(map, OBJ_TAG); hp=map->a; sh=map->sh; }