From b5acf6e0c1aedd68ec3423a45c7bf30599832708 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Fri, 2 Feb 2018 20:44:46 +0100 Subject: [PATCH] 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) https://github.com/vim/vim/commit/0ea5070d79c8a13fb2403280a72f968495b0fab7 --- src/nvim/ex_docmd.c | 1 + src/nvim/testdir/test_tabpage.vim | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 4f0208c5c3..34d8546653 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -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 // being closed (can only happen in autocommands). if (curbuf_locked() + || !win_valid(wp) || (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0)) { return; } diff --git a/src/nvim/testdir/test_tabpage.vim b/src/nvim/testdir/test_tabpage.vim index 33139fcda0..51f2477209 100644 --- a/src/nvim/testdir/test_tabpage.vim +++ b/src/nvim/testdir/test_tabpage.vim @@ -473,5 +473,23 @@ func Test_tabnext_on_buf_unload2() endwhile endfunc +func Test_close_on_quitpre() + " This once caused a crash + new + only + set bufhidden=delete + au QuitPre 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