diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-11-15 07:58:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-15 07:58:22 +0800 |
commit | 74399738510cb880507cba14f71acc0a96e14327 (patch) | |
tree | 456f4d35f86870277fb6e4a67d482811fb58e349 | |
parent | 2685d27cd65ea255f9bf1fce44a355e235016212 (diff) | |
download | rneovim-74399738510cb880507cba14f71acc0a96e14327.tar.gz rneovim-74399738510cb880507cba14f71acc0a96e14327.tar.bz2 rneovim-74399738510cb880507cba14f71acc0a96e14327.zip |
vim-patch:9.0.0882: using freed memory after SpellFileMissing autocmd uses bwipe (#21060)
Problem: Using freed memory after SpellFileMissing autocmd uses bwipe.
Solution: Bail out if the window no longer exists.
https://github.com/vim/vim/commit/c3d27ada14acd02db357f2d16347acc22cb17e93
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/spell.c | 5 | ||||
-rw-r--r-- | src/nvim/testdir/test_spell.vim | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/nvim/spell.c b/src/nvim/spell.c index b1daf4ed23..b9ea7557c4 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -110,6 +110,7 @@ #include "nvim/types.h" // for char_u #include "nvim/undo.h" // for u_save_cursor #include "nvim/vim.h" // for curwin, strlen, STRLCPY, STRNCMP +#include "nvim/window.h" // for win_valid_any_tab // Result values. Lower number is accepted over higher one. enum { @@ -1965,8 +1966,8 @@ char *did_set_spelllang(win_T *wp) } else { spell_load_lang((char_u *)lang); // SpellFileMissing autocommands may do anything, including - // destroying the buffer we are using... - if (!bufref_valid(&bufref)) { + // destroying the buffer we are using or closing the window. + if (!bufref_valid(&bufref) || !win_valid_any_tab(wp)) { ret_msg = N_("E797: SpellFileMissing autocommand deleted buffer"); goto theend; } diff --git a/src/nvim/testdir/test_spell.vim b/src/nvim/testdir/test_spell.vim index ea18fc5194..a919156066 100644 --- a/src/nvim/testdir/test_spell.vim +++ b/src/nvim/testdir/test_spell.vim @@ -159,6 +159,19 @@ func Test_spell_file_missing() %bwipe! endfunc +func Test_spell_file_missing_bwipe() + " this was using a window that was wiped out in a SpellFileMissing autocmd + set spelllang=xy + au SpellFileMissing * n0 + set spell + au SpellFileMissing * bw + snext somefile + + au! SpellFileMissing + bwipe! + set nospell spelllang=en +endfunc + func Test_spelldump() " In case the spell file is not found avoid getting the download dialog, we " would get stuck at the prompt. |