mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
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:
@@ -3324,3 +3324,5 @@ EXTERN char e_non_null_dict_required_for_argument_nr[]
|
|||||||
EXTERN char e_non_null_list_required_for_argument_nr[]
|
EXTERN char e_non_null_list_required_for_argument_nr[]
|
||||||
INIT(= N_("E1298: Non-NULL List required for argument %d"));
|
INIT(= N_("E1298: Non-NULL List required for argument %d"));
|
||||||
#endif
|
#endif
|
||||||
|
EXTERN char e_window_unexpectedly_close_while_searching_for_tags[]
|
||||||
|
INIT(= N_("E1299: Window unexpectedly closed while searching for tags"));
|
||||||
|
10
src/tag.c
10
src/tag.c
@@ -690,6 +690,16 @@ do_tag(
|
|||||||
max_num_matches = MAXCOL; // If less than max_num_matches
|
max_num_matches = MAXCOL; // If less than max_num_matches
|
||||||
// found: all matches found.
|
// 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
|
// If there already were some matches for the same name, move them
|
||||||
// to the start. Avoids that the order changes when using
|
// to the start. Avoids that the order changes when using
|
||||||
// ":tnext" and jumping to another file.
|
// ":tnext" and jumping to another file.
|
||||||
|
@@ -401,4 +401,17 @@ func Test_tagfunc_wipes_buffer()
|
|||||||
set tagfunc=
|
set tagfunc=
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -703,6 +703,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
389,
|
||||||
/**/
|
/**/
|
||||||
388,
|
388,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user