summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-11-14 20:52:14 +0000
committerBram Moolenaar <Bram@vim.org>2022-11-14 20:52:14 +0000
commitc3d27ada14acd02db357f2d16347acc22cb17e93 (patch)
treea10911ea76709d00e0014de4abf82cc1f1a47cd8
parent24dc19cdb2ce7cda2156d3b2eca6aee552b097dc (diff)
patch 9.0.0882: using freed memory after SpellFileMissing autocmd uses bwipev9.0.0882
Problem: Using freed memory after SpellFileMissing autocmd uses bwipe. Solution: Bail out if the window no longer exists.
-rw-r--r--src/spell.c4
-rw-r--r--src/testdir/test_spell.vim13
-rw-r--r--src/version.c2
3 files changed, 17 insertions, 2 deletions
diff --git a/src/spell.c b/src/spell.c
index 508c3ba38b..7d8ffe63d8 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -2110,8 +2110,8 @@ did_set_spelllang(win_T *wp)
{
spell_load_lang(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_(e_spellfilemising_autocommand_deleted_buffer);
goto theend;
diff --git a/src/testdir/test_spell.vim b/src/testdir/test_spell.vim
index 4a7a46c5b3..bd387f11d2 100644
--- a/src/testdir/test_spell.vim
+++ b/src/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.
diff --git a/src/version.c b/src/version.c
index c5e78389a5..a35a172ace 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 882,
+/**/
881,
/**/
880,