1
0
forked from aniani/vim

patch 9.0.0389: crash when 'tagfunc' closes the window

Problem:    Crash when 'tagfunc' closes the window.
Solution:   Bail out when the window was closed.
This commit is contained in:
Bram Moolenaar
2022-09-05 19:51:13 +01:00
parent 8894761daf
commit ccfde4d028
4 changed files with 27 additions and 0 deletions

View File

@@ -3324,3 +3324,5 @@ EXTERN char e_non_null_dict_required_for_argument_nr[]
EXTERN char e_non_null_list_required_for_argument_nr[]
INIT(= N_("E1298: Non-NULL List required for argument %d"));
#endif
EXTERN char e_window_unexpectedly_close_while_searching_for_tags[]
INIT(= N_("E1299: Window unexpectedly closed while searching for tags"));

View File

@@ -690,6 +690,16 @@ do_tag(
max_num_matches = MAXCOL; // If less than max_num_matches
// found: all matches found.
// A tag function may do anything, which may cause various
// information to become invalid. At least check for the tagstack
// to still be the same.
if (tagstack != curwin->w_tagstack)
{
emsg(_(e_window_unexpectedly_close_while_searching_for_tags));
FreeWild(new_num_matches, new_matches);
break;
}
// If there already were some matches for the same name, move them
// to the start. Avoids that the order changes when using
// ":tnext" and jumping to another file.

View File

@@ -401,4 +401,17 @@ func Test_tagfunc_wipes_buffer()
set tagfunc=
endfunc
func Test_tagfunc_closes_window()
split any
func MytagfuncClose(pat, flags, info)
close
return [{'name' : 'mytag', 'filename' : 'Xtest', 'cmd' : '1'}]
endfunc
set tagfunc=MytagfuncClose
call assert_fails('tag xyz', 'E1299:')
set tagfunc=
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

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