0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 8.2.0061: the execute stack can grow big and never shrinks

Problem:    The execute stack can grow big and never shrinks.
Solution:   Reduce the size in gargage collect.
This commit is contained in:
Bram Moolenaar
2019-12-30 19:19:53 +01:00
parent d0337e360e
commit 3fbcc128cb
2 changed files with 26 additions and 0 deletions

View File

@@ -3857,6 +3857,30 @@ garbage_collect(int testing)
garbage_collect_at_exit = FALSE; garbage_collect_at_exit = FALSE;
} }
// The execution stack can grow big, limit the size.
if (exestack.ga_maxlen - exestack.ga_len > 500)
{
size_t new_len;
char_u *pp;
int n;
// Keep 150% of the current size, with a minimum of the growth size.
n = exestack.ga_len / 2;
if (n < exestack.ga_growsize)
n = exestack.ga_growsize;
// Don't make it bigger though.
if (exestack.ga_len + n < exestack.ga_maxlen)
{
new_len = exestack.ga_itemsize * (exestack.ga_len + n);
pp = vim_realloc(exestack.ga_data, new_len);
if (pp == NULL)
return FAIL;
exestack.ga_maxlen = exestack.ga_len + n;
exestack.ga_data = pp;
}
}
// We advance by two because we add one for items referenced through // We advance by two because we add one for items referenced through
// previous_funccal. // previous_funccal.
copyID = get_copyID(); copyID = get_copyID();

View File

@@ -742,6 +742,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 */
/**/
61,
/**/ /**/
60, 60,
/**/ /**/