# HG changeset patch # User Bram Moolenaar # Date 1612696503 -3600 # Node ID 5a4f9c5c1b9998b4a5c19255dbcc52dc8bc72ced # Parent 1a97398d5e5ab715717d461d3361649773b972a6 patch 8.2.2476: using freed memory when splitting window while closing buffer Commit: https://github.com/vim/vim/commit/983d83ff1cd796ff321074335fa53fbe7ac45a46 Author: Bram Moolenaar Date: Sun Feb 7 12:12:43 2021 +0100 patch 8.2.2476: using freed memory when splitting window while closing buffer Problem: Using freed memory when using an autocommand to split a window while a buffer is being closed. Solution: Disallow splitting when the buffer has b_locked_split set. diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -595,6 +595,7 @@ close_buffer( if (buf->b_nwindows == 1) { ++buf->b_locked; + ++buf->b_locked_split; if (apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname, FALSE, buf) && !bufref_valid(&bufref)) @@ -605,6 +606,7 @@ aucmd_abort: return FALSE; } --buf->b_locked; + --buf->b_locked_split; if (abort_if_last && one_window()) // Autocommands made this the only window. goto aucmd_abort; @@ -614,12 +616,14 @@ aucmd_abort: if (!unload_buf) { ++buf->b_locked; + ++buf->b_locked_split; if (apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname, FALSE, buf) && !bufref_valid(&bufref)) // Autocommands deleted the buffer. goto aucmd_abort; --buf->b_locked; + --buf->b_locked_split; if (abort_if_last && one_window()) // Autocommands made this the only window. goto aucmd_abort; @@ -800,6 +804,7 @@ buf_freeall(buf_T *buf, int flags) // Make sure the buffer isn't closed by autocommands. ++buf->b_locked; + ++buf->b_locked_split; set_bufref(&bufref, buf); if (buf->b_ml.ml_mfp != NULL) { @@ -826,6 +831,7 @@ buf_freeall(buf_T *buf, int flags) return; } --buf->b_locked; + --buf->b_locked_split; // If the buffer was in curwin and the window has changed, go back to that // window, if it still exists. This avoids that ":edit x" triggering a @@ -1718,8 +1724,8 @@ set_curbuf(buf_T *buf, int action) set_bufref(&prevbufref, prevbuf); set_bufref(&newbufref, buf); - // Autocommands may delete the current buffer and/or the buffer we want to go - // to. In those cases don't close the buffer. + // Autocommands may delete the current buffer and/or the buffer we want to + // go to. In those cases don't close the buffer. if (!apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf) || (bufref_valid(&prevbufref) && bufref_valid(&newbufref) diff --git a/src/errors.h b/src/errors.h --- a/src/errors.h +++ b/src/errors.h @@ -353,3 +353,5 @@ EXTERN char e_missing_return_type[] INIT(= N_("E1157: Missing return type")); EXTERN char e_cannot_use_flatten_in_vim9_script[] INIT(= N_("E1158: Cannot use flatten() in Vim9 script")); +EXTERN char e_cannot_split_window_when_closing_buffer[] + INIT(= N_("E1159: Cannot split a window when closing the buffer")); diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -1941,7 +1941,7 @@ popup_create(typval_T *argvars, typval_T buf->b_p_ul = -1; // no undo buf->b_p_swf = FALSE; // no swap file buf->b_p_bl = FALSE; // unlisted buffer - buf->b_locked = TRUE; + buf->b_locked = TRUE; // prevent deleting the buffer // Avoid that 'buftype' is reset when this buffer is entered. buf->b_p_initialized = TRUE; diff --git a/src/structs.h b/src/structs.h --- a/src/structs.h +++ b/src/structs.h @@ -2633,6 +2633,8 @@ struct file_buffer int b_flags; // various BF_ flags int b_locked; // Buffer is being closed or referenced, don't // let autocommands wipe it out. + int b_locked_split; // Buffer is being closed, don't allow opening + // a new window with it. /* * b_ffname has the full path of the file (NULL for no name). diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim index c1d3639538c08fc3564c6e3a0f1cf1f6322c6b58..3109f88bbd673a7f60829a5f2f3bbf5fc66de7ee GIT binary patch literal 83371 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 M_?L$juw_buffer->b_locked_split) + { + emsg(_(e_cannot_split_window_when_closing_buffer)); + return FAIL; + } return OK; } @@ -793,6 +798,9 @@ win_split(int size, int flags) if (ERROR_IF_ANY_POPUP_WINDOW) return FAIL; + if (check_split_disallowed() == FAIL) + return FAIL; + // When the ":tab" modifier was used open a new tab page instead. if (may_open_tabpage() == OK) return OK; @@ -804,8 +812,6 @@ win_split(int size, int flags) emsg(_("E442: Can't split topleft and botright at the same time")); return FAIL; } - if (check_split_disallowed() == FAIL) - return FAIL; // When creating the help window make a snapshot of the window layout. // Otherwise clear the snapshot, it's now invalid.