vim-patch:9.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 vim/vim#6998)

81ed496048

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq 2024-07-31 09:53:13 +08:00
parent 403de7ffc7
commit 43c137c3d8
2 changed files with 14 additions and 2 deletions

View File

@ -1519,7 +1519,14 @@ static char *get_lval_subscript(lval_T *lp, char *p, char *name, typval_T *rettv
key = (char *)tv_get_string(&var1); // is number or string
}
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 = tv_dict_alloc();
lp->ll_tv->vval.v_dict->dv_refcount++;
}
lp->ll_dict = lp->ll_tv->vval.v_dict;
lp->ll_di = tv_dict_find(lp->ll_dict, key, len);
// When assigning to a scope dictionary check that a function and

View File

@ -59,8 +59,13 @@ int eexe_mod_op(typval_T *const tv1, const typval_T *const tv2, const char *cons
break;
}
// List += List
if (tv1->vval.v_list != NULL && tv2->vval.v_list != NULL) {
tv_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;
tv_list_ref(tv1->vval.v_list);
} else {
tv_list_extend(tv1->vval.v_list, tv2->vval.v_list, NULL);
}
}
return OK;
case VAR_NUMBER: