patch 9.0.0949: crash when unletting a variable while listing variables
Problem: Crash when unletting a variable while listing variables.
Solution: Disallow changing a hashtable while going over the entries.
(closes #11435)
diff --git a/src/vim9script.c b/src/vim9script.c
index 557892c..1d7eea0 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -942,7 +942,8 @@
if (HASHITEM_EMPTY(hi))
// new variable name
- hash_add(&si->sn_all_vars.dv_hashtab, newsav->sav_key);
+ hash_add(&si->sn_all_vars.dv_hashtab, newsav->sav_key,
+ "add variable");
else if (sav != NULL)
// existing name in a new block, append to the list
sav->sav_next = newsav;
@@ -1033,7 +1034,7 @@
else
{
if (sav_prev == NULL)
- hash_remove(all_ht, all_hi);
+ hash_remove(all_ht, all_hi, "hide variable");
else
sav_prev->sav_next = sav->sav_next;
sv->sv_name = NULL;