1
0
forked from aniani/vim

patch 8.2.4998: Vim9: crash when using multiple funcref()

Problem:    Vim9: crash when using multiple funcref().
Solution:   Check if varargs type is NULL. (closes #10467)
This commit is contained in:
Bram Moolenaar
2022-05-22 13:45:52 +01:00
parent 37233f6022
commit bce69d65dd
3 changed files with 48 additions and 1 deletions

View File

@@ -4107,6 +4107,47 @@ func Test_lambda_allocation_failure()
bw!
endfunc
def Test_multiple_funcref()
# This was using a NULL pointer
var lines =<< trim END
vim9script
def A(F: func, ...args: list<any>): func
return funcref(F, args)
enddef
def B(F: func): func
return funcref(A, [F])
enddef
def Test(n: number)
enddef
const X = B(Test)
X(1)
END
v9.CheckScriptSuccess(lines)
# slightly different case
lines =<< trim END
vim9script
def A(F: func, ...args: list<any>): any
return call(F, args)
enddef
def B(F: func): func
return funcref(A, [F])
enddef
def Test(n: number)
enddef
const X = B(Test)
X(1)
END
v9.CheckScriptSuccess(lines)
enddef
" The following messes up syntax highlight, keep near the end.
if has('python3')
def Test_python3_command()

View File

@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4998,
/**/
4997,
/**/

View File

@@ -807,7 +807,11 @@ check_argument_types(
else
tv = &argvars[i];
if (varargs && i >= type->tt_argcount - 1)
expected = type->tt_args[type->tt_argcount - 1]->tt_member;
{
expected = type->tt_args[type->tt_argcount - 1];
if (expected != NULL)
expected = expected->tt_member;
}
else
expected = type->tt_args[i];
if (check_typval_arg_type(expected, tv, NULL, i + 1) == FAIL)