0
0
mirror of https://github.com/vim/vim.git synced 2025-11-03 09:44:48 -05:00

patch 8.1.0936: may leak memory when using 'vartabstop'

Problem:    May leak memory when using 'vartabstop'. (Kuang-che Wu)
Solution:   Fix handling allocated memory for 'vartabstop'. (closes #3976)
This commit is contained in:
Bram Moolenaar
2019-02-16 19:05:11 +01:00
parent 8bfd9469ce
commit 55c77cf2ea
3 changed files with 12 additions and 7 deletions

View File

@@ -5594,7 +5594,9 @@ didset_options2(void)
(void)check_clipboard_option();
#endif
#ifdef FEAT_VARTABS
vim_free(curbuf->b_p_vsts_array);
tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array);
vim_free(curbuf->b_p_vts_array);
tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_array);
#endif
}
@@ -7572,14 +7574,14 @@ did_set_string_option(
if (errmsg == NULL)
{
int *oldarray = curbuf->b_p_vts_array;
if (tabstop_set(*varp, &(curbuf->b_p_vts_array)))
{
if (oldarray)
vim_free(oldarray);
vim_free(oldarray);
#ifdef FEAT_FOLDING
if (foldmethodIsIndent(curwin))
foldUpdateAll(curwin);
#endif /* FEAT_FOLDING */
#endif
}
else
errmsg = e_invarg;
@@ -12706,10 +12708,11 @@ check_ff_value(char_u *p)
return check_opt_strings(p, p_ff_values, FALSE);
}
#ifdef FEAT_VARTABS
#if defined(FEAT_VARTABS) || defined(PROTO)
/*
* Set the integer values corresponding to the string setting of 'vartabstop'.
* "array" will be set, caller must free it if needed.
*/
int
tabstop_set(char_u *var, int **array)
@@ -12752,6 +12755,8 @@ tabstop_set(char_u *var, int **array)
}
*array = (int *)alloc((unsigned) ((valcount + 1) * sizeof(int)));
if (*array == NULL)
return FALSE;
(*array)[0] = valcount;
t = 1;