Skip to content

Commit 44ec21c

Browse files
committed
patch 8.2.2504: Vim9: crash when using an argument from a closure
Problem: Vim9: crash when using an argument from a closure. Solution: Check if gen_load_outer is NULL. (closes #7821)
1 parent d9d7789 commit 44ec21c

3 files changed

Lines changed: 16 additions & 1 deletion

File tree

src/testdir/test_vim9_func.vim

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,18 @@ def Test_closure_using_argument()
16691669

16701670
unlet g:UseArg
16711671
unlet g:UseVararg
1672+
1673+
var lines =<< trim END
1674+
vim9script
1675+
def Test(Fun: func(number): number): list<number>
1676+
return map([1, 2, 3], (_, i) => Fun(i))
1677+
enddef
1678+
def Inc(nr: number): number
1679+
return nr + 2
1680+
enddef
1681+
assert_equal([3, 4, 5], Test(Inc))
1682+
END
1683+
CheckScriptSuccess(lines)
16721684
enddef
16731685

16741686
def MakeGetAndAppendRefs()

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2504,
753755
/**/
754756
2503,
755757
/**/

src/vim9compile.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ arg_exists(
261261
if (arg_exists(name, len, idxp, type, gen_load_outer, cctx->ctx_outer)
262262
== OK)
263263
{
264-
++*gen_load_outer;
264+
if (gen_load_outer != NULL)
265+
++*gen_load_outer;
265266
return OK;
266267
}
267268
}

0 commit comments

Comments
 (0)