aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <janedmundlazo@hotmail.com>2018-09-29 00:41:02 -0400
committerJan Edmund Lazo <janedmundlazo@hotmail.com>2018-09-29 16:45:51 -0400
commit63b1a7d0cf6d192585c4929cff188e9c255c0a76 (patch)
treea723685b4d9ed6338e5d73af046fb4251525b73e /src
parent6e146d413267de044a1f9f0bbb0290b5387e631c (diff)
downloadrneovim-63b1a7d0cf6d192585c4929cff188e9c255c0a76.tar.gz
rneovim-63b1a7d0cf6d192585c4929cff188e9c255c0a76.tar.bz2
rneovim-63b1a7d0cf6d192585c4929cff188e9c255c0a76.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c9
-rw-r--r--src/nvim/globals.h2
2 files changed, 11 insertions, 0 deletions
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"));