vim-patch:9.0.0805: filetype autocmd may cause freed memory access

Problem:    Filetype autocmd may cause freed memory access.
Solution:   Set the quickfix-busy flag while filling the buffer.

d0fab10ed2

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq
2022-12-03 03:40:31 +08:00
parent 70ac0c9358
commit 1e6d5fdf3f
2 changed files with 22 additions and 0 deletions

View File

@@ -3900,6 +3900,9 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last)
qf_winid = (int)win->handle;
}
// autocommands may cause trouble
incr_quickfix_busy();
aco_save_T aco;
if (old_last == NULL) {
@@ -3924,6 +3927,9 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last)
if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline) {
redraw_buf_later(buf, UPD_NOT_VALID);
}
// always called after incr_quickfix_busy()
decr_quickfix_busy();
}
}

View File

@@ -3298,6 +3298,21 @@ func Test_resize_from_copen()
endtry
endfunc
func Test_filetype_autocmd()
" this changes the location list while it is in use to fill a buffer
lexpr ''
lopen
augroup FT_loclist
au FileType * call setloclist(0, [], 'f')
augroup END
silent! lolder
lexpr ''
augroup FT_loclist
au! FileType
augroup END
endfunc
func Test_vimgrep_with_textlock()
new
@@ -6165,4 +6180,5 @@ func Test_loclist_replace_autocmd()
call setloclist(0, [], 'f')
endfunc
" vim: shiftwidth=2 sts=2 expandtab