patch 8.0.0458: potential crash if adding list or dict to dict fails
Problem: Potential crash if adding list or dict to dict fails.
Solution: Make sure the reference count is correct. (Nikolai Pavlov, closes
#1555)
diff --git a/src/dict.c b/src/dict.c
index 7074305..a26419b 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -356,12 +356,12 @@
item->di_tv.v_lock = 0;
item->di_tv.v_type = VAR_LIST;
item->di_tv.vval.v_list = list;
+ ++list->lv_refcount;
if (dict_add(d, item) == FAIL)
{
dictitem_free(item);
return FAIL;
}
- ++list->lv_refcount;
return OK;
}
@@ -380,12 +380,12 @@
item->di_tv.v_lock = 0;
item->di_tv.v_type = VAR_DICT;
item->di_tv.vval.v_dict = dict;
+ ++dict->dv_refcount;
if (dict_add(d, item) == FAIL)
{
dictitem_free(item);
return FAIL;
}
- ++dict->dv_refcount;
return OK;
}