From 63b1a7d0cf6d192585c4929cff188e9c255c0a76 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 29 Sep 2018 00:41:02 -0400 Subject: vim-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 vim/vim#2472) https://github.com/vim/vim/commit/9e33efd1523b85a70533930dd43a26925a2b648c --- src/nvim/ex_docmd.c | 9 +++++++++ src/nvim/globals.h | 2 ++ 2 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index ad51de46ee..cec5431bbd 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6536,6 +6536,13 @@ void alist_expand(int *fnum_list, int fnum_len) void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum_list, int fnum_len) { int i; + static int recursive = 0; + + if (recursive) { + EMSG(_(e_au_recursive)); + return; + } + recursive++; alist_clear(al); ga_grow(&al->al_ga, count); @@ -6562,6 +6569,8 @@ void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum if (al == &global_alist) arg_had_last = FALSE; + + recursive--; } /* diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 9bba2379cd..5606747ce9 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -1099,6 +1099,8 @@ 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_dirnotf[] INIT(= N_( "E919: Directory not found in '%s': \"%s\"")); +EXTERN char_u e_au_recursive[] INIT(= N_( + "E952: Autocommand caused recursive behavior")); EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported")); EXTERN char_u e_fnametoolong[] INIT(= N_("E856: Filename too long")); EXTERN char_u e_float_as_string[] INIT(= N_("E806: using Float as a String")); -- cgit