mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
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)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1750,
|
||||
/**/
|
||||
1749,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user