0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.3059: Vim9: memory leak when using lambda

Problem:    Vim9: memory leak when using lambda.
Solution:   Do not store the default value strings when skipping.
This commit is contained in:
Bram Moolenaar
2021-06-26 22:17:35 +02:00
parent 015cf10311
commit e3ffaa6b7c
2 changed files with 23 additions and 18 deletions

View File

@@ -198,7 +198,7 @@ get_function_args(
ga_init2(newargs, (int)sizeof(char_u *), 3);
if (argtypes != NULL)
ga_init2(argtypes, (int)sizeof(char_u *), 3);
if (default_args != NULL)
if (!skip && default_args != NULL)
ga_init2(default_args, (int)sizeof(char_u *), 3);
if (varargs != NULL)
@@ -289,24 +289,27 @@ get_function_args(
expr = p;
if (eval1(&p, &rettv, NULL) != FAIL)
{
if (ga_grow(default_args, 1) == FAIL)
goto err_ret;
// trim trailing whitespace
while (p > expr && VIM_ISWHITE(p[-1]))
p--;
c = *p;
*p = NUL;
expr = vim_strsave(expr);
if (expr == NULL)
if (!skip)
{
*p = c;
goto err_ret;
}
((char_u **)(default_args->ga_data))
if (ga_grow(default_args, 1) == FAIL)
goto err_ret;
// trim trailing whitespace
while (p > expr && VIM_ISWHITE(p[-1]))
p--;
c = *p;
*p = NUL;
expr = vim_strsave(expr);
if (expr == NULL)
{
*p = c;
goto err_ret;
}
((char_u **)(default_args->ga_data))
[default_args->ga_len] = expr;
default_args->ga_len++;
*p = c;
default_args->ga_len++;
*p = c;
}
}
else
mustend = TRUE;
@@ -357,7 +360,7 @@ get_function_args(
err_ret:
if (newargs != NULL)
ga_clear_strings(newargs);
if (default_args != NULL)
if (!skip && default_args != NULL)
ga_clear_strings(default_args);
return FAIL;
}

View File

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