changeset 23845:7517eb94239b v8.2.2464

patch 8.2.2464: using freed memory if window closed in autocommand Commit: https://github.com/vim/vim/commit/8ab375706e6712308f8cf7529bcae56684a6f385 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 3 21:56:59 2021 +0100 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.
author Bram Moolenaar <Bram@vim.org>
date Wed, 03 Feb 2021 22:00:04 +0100
parents 0df5534e8ddb
children 3b6bca71ab93
files src/ex_cmds.c src/testdir/test_autocmd.vim src/version.c
diffstat 3 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2768,7 +2768,9 @@ do_ecmd(
 		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
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -2726,4 +2726,15 @@ func Test_BufNew_arglocal()
   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
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2464,
+/**/
     2463,
 /**/
     2462,