forked from aniani/vim
updated for version 7.3.516
Problem: extend(o, o) may crash Vim. Solution: Fix crash and add test. (Thinca and Hirohito Higashi)
This commit is contained in:
@@ -10191,7 +10191,7 @@ f_extend(argvars, rettv)
|
|||||||
EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
|
EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (*action == 'f')
|
else if (*action == 'f' && HI2DI(hi2) != di1)
|
||||||
{
|
{
|
||||||
clear_tv(&di1->di_tv);
|
clear_tv(&di1->di_tv);
|
||||||
copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
|
copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
|
||||||
|
@@ -352,6 +352,24 @@ let l = [0, 1, 2, 3]
|
|||||||
:let dict4copy = deepcopy(dict4)
|
:let dict4copy = deepcopy(dict4)
|
||||||
:$put =(l == lcopy)
|
:$put =(l == lcopy)
|
||||||
:$put =(dict4 == dict4copy)
|
:$put =(dict4 == dict4copy)
|
||||||
|
:"
|
||||||
|
:" Pass the same List to extend()
|
||||||
|
:let l = [1, 2, 3, 4, 5]
|
||||||
|
:call extend(l, l)
|
||||||
|
:$put =string(l)
|
||||||
|
:"
|
||||||
|
:" Pass the same Dict to extend()
|
||||||
|
:let d = { 'a': {'b': 'B'}}
|
||||||
|
:call extend(d, d)
|
||||||
|
:$put =string(d)
|
||||||
|
:"
|
||||||
|
:" Pass the same Dict to extend() with "error"
|
||||||
|
:try
|
||||||
|
: call extend(d, d, "error")
|
||||||
|
:catch
|
||||||
|
: $put =v:exception[:15] . v:exception[-1:-1]
|
||||||
|
:endtry
|
||||||
|
:$put =string(d)
|
||||||
:endfun
|
:endfun
|
||||||
:"
|
:"
|
||||||
:call Test(1, 2, [3, 4], {5: 6}) " This may take a while
|
:call Test(1, 2, [3, 4], {5: 6}) " This may take a while
|
||||||
|
@@ -111,3 +111,7 @@ caught a:000[3]
|
|||||||
0
|
0
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
|
||||||
|
{'a': {'b': 'B'}}
|
||||||
|
Vim(call):E737: a
|
||||||
|
{'a': {'b': 'B'}}
|
||||||
|
@@ -714,6 +714,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 */
|
||||||
|
/**/
|
||||||
|
516,
|
||||||
/**/
|
/**/
|
||||||
515,
|
515,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user