]> granicus.if.org Git - vim/commitdiff
patch 8.0.0575: using freed memory when resetting 'indentexpr' v8.0.0575
authorBram Moolenaar <Bram@vim.org>
Thu, 20 Apr 2017 20:57:27 +0000 (22:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 20 Apr 2017 20:57:27 +0000 (22:57 +0200)
Problem:    Using freed memory when resetting 'indentexpr' while evaluating
            it. (Dominique Pelle)
Solution:   Make a copy of 'indentexpr'.

src/misc1.c
src/testdir/test_options.vim
src/version.c

index 951467d94c3553ef005dfa6af3d17fc085cd4cac..1a220e1eb58cbff80e50c5db68c921801a13f35e 100644 (file)
@@ -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;
index d72ca74b291a797e414a3b0883213f2164894ce4..5d2033a5dff3556121b2c65a40589eac521ba778 100644 (file)
@@ -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
index 28fe0b7e82df7ab6e8d555f9f89b8924a0415002..60dbdf4188aa8b04ba8a7be710fea0c6e29e4cbb 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    575,
 /**/
     574,
 /**/