1
0
forked from aniani/vim

patch 8.2.2505: Vim9: crash after defining function with invalid return type

Problem:    Vim9: crash after defining function with invalid return type.
Solution:   Clear function growarrays.  Fix memory leak.
This commit is contained in:
Bram Moolenaar
2021-02-12 22:10:21 +01:00
parent 44ec21c467
commit 31842cd077
3 changed files with 24 additions and 0 deletions

View File

@@ -254,6 +254,21 @@ def Test_return_invalid()
defcompile
END
CheckScriptFailure(lines, 'E1010:', 2)
lines =<< trim END
vim9script
def Test(Fun: func(number): number): list<number>
return map([1, 2, 3], (_, i) => Fun(i))
enddef
defcompile
def Inc(nr: number): nr
return nr + 2
enddef
echo Test(Inc)
END
# doing this twice was leaking memory
CheckScriptFailure(lines, 'E1010:')
CheckScriptFailure(lines, 'E1010:')
enddef
func Increment()

View File

@@ -3955,8 +3955,15 @@ define_function(exarg_T *eap, char_u *name_arg)
erret:
ga_clear_strings(&newargs);
ga_clear_strings(&default_args);
if (fp != NULL)
{
ga_init(&fp->uf_args);
ga_init(&fp->uf_def_args);
}
errret_2:
ga_clear_strings(&newlines);
if (fp != NULL)
VIM_CLEAR(fp->uf_arg_types);
ret_free:
ga_clear_strings(&argtypes);
vim_free(skip_until);

View File

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