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

patch 8.0.1485: weird autocmd may cause arglist to be changed recursively

Problem:    Weird autocmd may cause arglist to be changed recursively.
Solution:   Prevent recursively changing the argument list. (Christian
            Brabandt, closes #2472)
This commit is contained in:
Bram Moolenaar 2018-02-09 17:50:28 +01:00
parent a15ef4588c
commit 9e33efd152
3 changed files with 17 additions and 0 deletions

View File

@ -8058,6 +8058,16 @@ alist_set(
int fnum_len) int fnum_len)
{ {
int i; int i;
static int recursive = 0;
if (recursive)
{
#ifdef FEAT_AUTOCMD
EMSG(_(e_au_recursive));
#endif
return;
}
++recursive;
alist_clear(al); alist_clear(al);
if (ga_grow(&al->al_ga, count) == OK) if (ga_grow(&al->al_ga, count) == OK)
@ -8087,6 +8097,8 @@ alist_set(
FreeWild(count, files); FreeWild(count, files);
if (al == &global_alist) if (al == &global_alist)
arg_had_last = FALSE; arg_had_last = FALSE;
--recursive;
} }
/* /*

View File

@ -1594,6 +1594,9 @@ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
#endif #endif
EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\""));
#ifdef FEAT_AUTOCMD
EXTERN char_u e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior"));
#endif
#ifdef FEAT_GUI_MAC #ifdef FEAT_GUI_MAC
EXTERN short disallow_gui INIT(= FALSE); EXTERN short disallow_gui INIT(= FALSE);

View File

@ -771,6 +771,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 */
/**/
1485,
/**/ /**/
1484, 1484,
/**/ /**/