0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.1731: Vim9: cannot use += to append to empty NULL list

Problem:    Vim9: cannot use += to append to empty NULL list.
Solution:   Copy the list instead of extending it. (closes #6998)
This commit is contained in:
Bram Moolenaar
2020-09-23 15:56:50 +02:00
parent 04bdd573d0
commit 81ed496048
3 changed files with 40 additions and 4 deletions

View File

@@ -872,8 +872,7 @@ get_lval(
while (*p == '[' || (*p == '.' && lp->ll_tv->v_type == VAR_DICT))
{
if (!(lp->ll_tv->v_type == VAR_LIST && lp->ll_tv->vval.v_list != NULL)
&& !(lp->ll_tv->v_type == VAR_DICT
&& lp->ll_tv->vval.v_dict != NULL)
&& !(lp->ll_tv->v_type == VAR_DICT)
&& !(lp->ll_tv->v_type == VAR_BLOB
&& lp->ll_tv->vval.v_blob != NULL))
{
@@ -994,7 +993,20 @@ get_lval(
}
}
lp->ll_list = NULL;
// a NULL dict is equivalent with an empty dict
if (lp->ll_tv->vval.v_dict == NULL)
{
lp->ll_tv->vval.v_dict = dict_alloc();
if (lp->ll_tv->vval.v_dict == NULL)
{
clear_tv(&var1);
return NULL;
}
++lp->ll_tv->vval.v_dict->dv_refcount;
}
lp->ll_dict = lp->ll_tv->vval.v_dict;
lp->ll_di = dict_find(lp->ll_dict, key, len);
// When assigning to a scope dictionary check that a function and
@@ -1460,8 +1472,16 @@ tv_op(typval_T *tv1, typval_T *tv2, char_u *op)
if (*op != '+' || tv2->v_type != VAR_LIST)
break;
// List += List
if (tv1->vval.v_list != NULL && tv2->vval.v_list != NULL)
list_extend(tv1->vval.v_list, tv2->vval.v_list, NULL);
if (tv2->vval.v_list != NULL)
{
if (tv1->vval.v_list == NULL)
{
tv1->vval.v_list = tv2->vval.v_list;
++tv1->vval.v_list->lv_refcount;
}
else
list_extend(tv1->vval.v_list, tv2->vval.v_list, NULL);
}
return OK;
case VAR_NUMBER: