vim-patch:8.0.0700: segfault with QuitPre autocommand closes the window

Problem:    Segfault with QuitPre autocommand closes the window. (Marek)
Solution:   Check that the window pointer is still valid. (Christian Brabandt,
            closes vim/vim#1817)

0ea5070d79
This commit is contained in:
Justin M. Keyes 2018-02-02 20:44:46 +01:00
parent 6116af02ef
commit b5acf6e0c1
2 changed files with 19 additions and 0 deletions

View File

@ -5978,6 +5978,7 @@ static void ex_quit(exarg_T *eap)
// Refuse to quit when locked or when the buffer in the last window is // Refuse to quit when locked or when the buffer in the last window is
// being closed (can only happen in autocommands). // being closed (can only happen in autocommands).
if (curbuf_locked() if (curbuf_locked()
|| !win_valid(wp)
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0)) { || (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0)) {
return; return;
} }

View File

@ -473,5 +473,23 @@ func Test_tabnext_on_buf_unload2()
endwhile endwhile
endfunc endfunc
func Test_close_on_quitpre()
" This once caused a crash
new
only
set bufhidden=delete
au QuitPre <buffer> close
tabnew tab1
tabnew tab2
1tabn
q!
call assert_equal(1, tabpagenr())
call assert_equal(2, tabpagenr('$'))
" clean up
while tabpagenr('$') > 1
bwipe!
endwhile
1b
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab