forked from aniani/vim
patch 8.2.4587: Vim9: double free after unpacking a list
Problem: Vim9: double free after unpacking a list. Solution: Make a copy of the value instead of moving it. (closes #9968)
This commit is contained in:
parent
1d9cef769d
commit
61efa16932
@ -2253,6 +2253,13 @@ def Test_for_loop_unpack()
|
||||
res->add(n)
|
||||
endfor
|
||||
assert_equal([2, 5], res)
|
||||
|
||||
var text: list<string> = ["hello there", "goodbye now"]
|
||||
var splitted = ''
|
||||
for [first; next] in mapnew(text, (i, v) => split(v))
|
||||
splitted ..= string(first) .. string(next) .. '/'
|
||||
endfor
|
||||
assert_equal("'hello'['there']/'goodbye'['now']/", splitted)
|
||||
END
|
||||
v9.CheckDefAndScriptSuccess(lines)
|
||||
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4587,
|
||||
/**/
|
||||
4586,
|
||||
/**/
|
||||
|
@ -4773,7 +4773,10 @@ exec_instructions(ectx_T *ectx)
|
||||
li = li->li_next;
|
||||
for (i = 0; li != NULL; ++i)
|
||||
{
|
||||
list_set_item(rem_list, i, &li->li_tv);
|
||||
typval_T tvcopy;
|
||||
|
||||
copy_tv(&li->li_tv, &tvcopy);
|
||||
list_set_item(rem_list, i, &tvcopy);
|
||||
li = li->li_next;
|
||||
}
|
||||
--count;
|
||||
|
Loading…
x
Reference in New Issue
Block a user