# HG changeset patch # User Christian Brabandt # Date 1518195607 -3600 # Node ID dc28351a85d4fea088a207db5d6e6e1fef40e2a3 # Parent 195671a4d06fde6ecd6e58d413a04307fd5ebd58 patch 8.0.1485: weird autocmd may cause arglist to be changed recursively commit https://github.com/vim/vim/commit/9e33efd1523b85a70533930dd43a26925a2b648c Author: Bram Moolenaar Date: Fri Feb 9 17:50:28 2018 +0100 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) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -8058,6 +8058,16 @@ alist_set( int fnum_len) { int i; + static int recursive = 0; + + if (recursive) + { +#ifdef FEAT_AUTOCMD + EMSG(_(e_au_recursive)); +#endif + return; + } + ++recursive; alist_clear(al); if (ga_grow(&al->al_ga, count) == OK) @@ -8087,6 +8097,8 @@ alist_set( FreeWild(count, files); if (al == &global_alist) arg_had_last = FALSE; + + --recursive; } /* diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -1594,6 +1594,9 @@ EXTERN char_u e_notset[] INIT(= N_("E764 EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); #endif 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 EXTERN short disallow_gui INIT(= FALSE); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1485, +/**/ 1484, /**/ 1483,