patch 8.2.2464: using freed memory if window closed in autocommand
Problem: Using freed memory if window closed in autocommand. (houyunsong)
Solution: Check the window still exists.
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index b678f66..b6e1cbf 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2768,7 +2768,9 @@
did_decrement = close_buffer(oldwin, curbuf,
(flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE, FALSE);
- the_curwin->w_closing = FALSE;
+ // Autocommands may have closed the window.
+ if (win_valid(the_curwin))
+ the_curwin->w_closing = FALSE;
--buf->b_locked;
#ifdef FEAT_EVAL
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index 71f8d2d..b1a235c 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -2726,4 +2726,15 @@
au! BufNew
endfunc
+func Test_autocmd_closes_window()
+ au BufNew,BufWinLeave * e %e
+ file yyy
+ au BufNew,BufWinLeave * ball
+ call assert_fails('n xxx', 'E143:')
+
+ bwipe %
+ au! BufNew
+ au! BufWinLeave
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 53ed13c..a93b81a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2464,
+/**/
2463,
/**/
2462,