Mercurial > vim
changeset 13756:c38f29387245 v8.0.1750
patch 8.0.1750: crash when clearing loccation list in autocommand
commit https://github.com/vim/vim/commit/3b9474b4ad4d85b5396f7f641b436f193dc9d486
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Apr 23 21:29:48 2018 +0200
patch 8.0.1750: crash when clearing loccation list in autocommand
Problem: Crash when clearing loccation list in autocommand.
Solution: Check if "qi" equals "ql_info". (Yegappan Lakshmanan)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 23 Apr 2018 21:30:06 +0200 |
parents | 5f94d5556dae |
children | 9e13085c80f6 |
files | src/quickfix.c src/testdir/test_quickfix.vim src/version.c |
diffstat | 3 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/quickfix.c +++ b/src/quickfix.c @@ -5897,7 +5897,6 @@ ex_helpgrep(exarg_T *eap) char_u *lang; #endif qf_info_T *qi = &ql_info; - qf_info_T *save_qi; int new_qi = FALSE; win_T *wp; char_u *au_name = NULL; @@ -5951,9 +5950,6 @@ ex_helpgrep(exarg_T *eap) } } - /* Autocommands may change the list. Save it for later comparison */ - save_qi = qi; - regmatch.regprog = vim_regcomp(eap->arg, RE_MAGIC + RE_STRING); regmatch.rm_ic = FALSE; if (regmatch.regprog != NULL) @@ -6086,7 +6082,7 @@ ex_helpgrep(exarg_T *eap) { apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, curbuf->b_fname, TRUE, curbuf); - if (!new_qi && qi != save_qi && qf_find_buf(qi) == NULL) + if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL) /* autocommands made "qi" invalid */ return; }
--- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -3175,3 +3175,17 @@ func Test_vimgrep_autocmd() call delete('Xtest2.txt') call setqflist([], 'f') endfunc + +" The following test used to crash Vim +func Test_lhelpgrep_autocmd() + lhelpgrep quickfix + autocmd QuickFixCmdPost * call setloclist(0, [], 'f') + lhelpgrep buffer + call assert_equal('help', &filetype) + call assert_equal(0, getloclist(0, {'nr' : '$'}).nr) + lhelpgrep tabpage + call assert_equal('help', &filetype) + call assert_equal(1, getloclist(0, {'nr' : '$'}).nr) + au! QuickFixCmdPost + new | only +endfunc