mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -04:00
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)
This commit is contained in:
parent
88d298aed8
commit
42f45b850d
@ -356,12 +356,12 @@ dict_add_list(dict_T *d, char *key, list_T *list)
|
|||||||
item->di_tv.v_lock = 0;
|
item->di_tv.v_lock = 0;
|
||||||
item->di_tv.v_type = VAR_LIST;
|
item->di_tv.v_type = VAR_LIST;
|
||||||
item->di_tv.vval.v_list = list;
|
item->di_tv.vval.v_list = list;
|
||||||
|
++list->lv_refcount;
|
||||||
if (dict_add(d, item) == FAIL)
|
if (dict_add(d, item) == FAIL)
|
||||||
{
|
{
|
||||||
dictitem_free(item);
|
dictitem_free(item);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
++list->lv_refcount;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,12 +380,12 @@ dict_add_dict(dict_T *d, char *key, dict_T *dict)
|
|||||||
item->di_tv.v_lock = 0;
|
item->di_tv.v_lock = 0;
|
||||||
item->di_tv.v_type = VAR_DICT;
|
item->di_tv.v_type = VAR_DICT;
|
||||||
item->di_tv.vval.v_dict = dict;
|
item->di_tv.vval.v_dict = dict;
|
||||||
|
++dict->dv_refcount;
|
||||||
if (dict_add(d, item) == FAIL)
|
if (dict_add(d, item) == FAIL)
|
||||||
{
|
{
|
||||||
dictitem_free(item);
|
dictitem_free(item);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
++dict->dv_refcount;
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
458,
|
||||||
/**/
|
/**/
|
||||||
457,
|
457,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user