diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-06-13 06:02:00 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-12 15:02:00 -0700 |
commit | 429c40cce3fce3b5391afef8208d65a80a316018 (patch) | |
tree | f468e6244bc01662180306904c0c008999713d22 /src/nvim/buffer.c | |
parent | feba56af7d032c948a78c21735502bebe45f8361 (diff) | |
download | rneovim-429c40cce3fce3b5391afef8208d65a80a316018.tar.gz rneovim-429c40cce3fce3b5391afef8208d65a80a316018.tar.bz2 rneovim-429c40cce3fce3b5391afef8208d65a80a316018.zip |
fix(buffer): disable buffer-updates before removing from window #18933
There can be other places that access window buffer info (e.g.
`tabpagebuflist()`), so checking `w_closing` in `win_findbuf()` doesn't
solve the crash in all cases, and may also cause Nvim's behavior to
diverge from Vim.
Fix #14998
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r-- | src/nvim/buffer.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 4c3f1308b3..921cd20943 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -575,6 +575,10 @@ bool close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last, bool i return false; } + // Disable buffer-updates for the current buffer. + // No need to check `unload_buf`: in that case the function returned above. + buf_updates_unload(buf, false); + if (win != NULL // Avoid bogus clang warning. && win_valid_any_tab(win) && win->w_buffer == buf) { @@ -587,10 +591,6 @@ bool close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last, bool i buf->b_nwindows--; } - // Disable buffer-updates for the current buffer. - // No need to check `unload_buf`: in that case the function returned above. - buf_updates_unload(buf, false); - // Remove the buffer from the list. if (wipe_buf) { // Do not wipe out the buffer if it is used in a window. |