Permalink
Browse files

patch 8.0.0575: using freed memory when resetting 'indentexpr'

Problem:    Using freed memory when resetting 'indentexpr' while evaluating
            it. (Dominique Pelle)
Solution:   Make a copy of 'indentexpr'.
  • Loading branch information...
brammool committed Apr 20, 2017
1 parent 99895ea commit a701b3b6f0f06ac0c9fcc75c6c34a1258fc3b1a2
Showing with 26 additions and 1 deletion.
  1. +11 −1 src/misc1.c
  2. +13 −0 src/testdir/test_options.vim
  3. +2 −0 src/version.c
View
@@ -9252,6 +9252,7 @@ find_match(int lookfor, linenr_T ourscope)
get_expr_indent(void)
{
int indent;
char_u *inde_copy;
pos_T save_pos;
colnr_T save_curswant;
int save_set_curswant;
@@ -9268,7 +9269,16 @@ get_expr_indent(void)
if (use_sandbox)
++sandbox;
++textlock;
indent = (int)eval_to_number(curbuf->b_p_inde);
/* Need to make a copy, the 'indentexpr' option could be changed while
* evaluating it. */
inde_copy = vim_strsave(curbuf->b_p_inde);
if (inde_copy != NULL)
{
indent = (int)eval_to_number(inde_copy);
vim_free(inde_copy);
}
if (use_sandbox)
--sandbox;
--textlock;
@@ -319,3 +319,16 @@ func Test_set_values()
throw 'Skipped: opt_test.vim does not exist'
endif
endfunc
func ResetIndentexpr()
set indentexpr=
endfunc
func Test_set_indentexpr()
" this was causing usage of freed memory
set indentexpr=ResetIndentexpr()
new
call feedkeys("i\<c-f>", 'x')
call assert_equal('', &indentexpr)
bwipe!
endfunc
View
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
575,
/**/
574,
/**/

0 comments on commit a701b3b

Please sign in to comment.