diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-06-16 12:42:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-16 12:42:05 +0200 |
commit | eeeaf04c5ecd4471c8a01c87d935e2c0e563272e (patch) | |
tree | 577c3f267866b06c35842dc96b3cd79d5e2e59b3 | |
parent | 4bb039e2257ede3faf968ef9adcb786e2f41ffe5 (diff) | |
parent | f4dffe7181ca55ebf44dd477f57acb8a73fa71fa (diff) | |
download | rneovim-eeeaf04c5ecd4471c8a01c87d935e2c0e563272e.tar.gz rneovim-eeeaf04c5ecd4471c8a01c87d935e2c0e563272e.tar.bz2 rneovim-eeeaf04c5ecd4471c8a01c87d935e2c0e563272e.zip |
Merge #8565 from janlazo/vim-8.0.0575
-rw-r--r-- | src/nvim/indent.c | 11 | ||||
-rw-r--r-- | src/nvim/testdir/test_options.vim | 12 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/nvim/indent.c b/src/nvim/indent.c index efca739c2d..c94186a1f2 100644 --- a/src/nvim/indent.c +++ b/src/nvim/indent.c @@ -520,7 +520,7 @@ int inindent(int extra) // Get indent level from 'indentexpr'. int get_expr_indent(void) { - int indent; + int indent = -1; pos_T save_pos; colnr_T save_curswant; int save_set_curswant; @@ -538,7 +538,14 @@ int get_expr_indent(void) 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. + char_u *inde_copy = vim_strsave(curbuf->b_p_inde); + if (inde_copy != NULL) { + indent = (int)eval_to_number(inde_copy); + xfree(inde_copy); + } if (use_sandbox) { sandbox--; diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim index 5ae8528ee9..d9cd5fd583 100644 --- a/src/nvim/testdir/test_options.vim +++ b/src/nvim/testdir/test_options.vim @@ -275,3 +275,15 @@ func Test_complete() set complete& endfun +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 |