0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.0097: crash with autocommand and spellfile

Problem:    Crash with autocommand and spellfile. (Tim Pope)
Solution:   Do not pop exestack when not pushed. (closes #5450)
This commit is contained in:
Bram Moolenaar 2020-01-07 20:11:42 +01:00
parent fbcdf671f0
commit ce6db0273f
3 changed files with 28 additions and 1 deletions

View File

@ -352,6 +352,7 @@ spell_load_file(
slang_T *lp = NULL;
int c = 0;
int res;
int did_estack_push = FALSE;
fd = mch_fopen((char *)fname, "r");
if (fd == NULL)
@ -392,6 +393,7 @@ spell_load_file(
// Set sourcing_name, so that error messages mention the file name.
estack_push(ETYPE_SPELL, fname, 0);
did_estack_push = TRUE;
/*
* <HEADER>: <fileID>
@ -578,7 +580,8 @@ endFAIL:
endOK:
if (fd != NULL)
fclose(fd);
estack_pop();
if (did_estack_push)
estack_pop();
return lp;
}

View File

@ -2335,3 +2335,25 @@ func Test_BufWrite_lockmarks()
call delete('Xtest')
call delete('Xtest2')
endfunc
func Test_FileType_spell()
if !isdirectory('/tmp')
throw "Skipped: requires /tmp directory"
endif
" this was crashing with an invalid free()
setglobal spellfile=/tmp/en.utf-8.add
augroup crash
autocmd!
autocmd BufNewFile,BufReadPost crashfile setf somefiletype
autocmd BufNewFile,BufReadPost crashfile set ft=anotherfiletype
autocmd FileType anotherfiletype setlocal spell
augroup END
func! NoCrash() abort
edit /tmp/crashfile
endfunc
call NoCrash()
au! crash
setglobal spellfile=
endfunc

View File

@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
97,
/**/
96,
/**/