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.

c3d27ada14

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq 2022-11-15 07:58:22 +08:00 committed by GitHub
parent 2685d27cd6
commit 7439973851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

View File

@ -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;
}

View File

@ -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.