Mercurial > vim
changeset 14101:c97e9edfc6b4 v8.1.0068
patch 8.1.0068: nasty autocommands can still cause using freed memory
commit https://github.com/vim/vim/commit/2f82ca7d79148ae931bf28a747ede06ba8a65de8
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jun 17 19:22:52 2018 +0200
patch 8.1.0068: nasty autocommands can still cause using freed memory
Problem: Nasty autocommands can still cause using freed memory.
Solution: Disallow using setloclist() and setqflist() recursively.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 17 Jun 2018 19:30:06 +0200 |
parents | 8729adac8e04 |
children | 6919feb4b26e |
files | src/evalfunc.c src/version.c |
diffstat | 2 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -10621,6 +10621,7 @@ set_qf_ll_list( static char *e_invact = N_("E927: Invalid action: '%s'"); char_u *act; int action = 0; + static int recursive = 0; #endif rettv->vval.v_number = -1; @@ -10628,6 +10629,8 @@ set_qf_ll_list( #ifdef FEAT_QUICKFIX if (list_arg->v_type != VAR_LIST) EMSG(_(e_listreq)); + else if (recursive != 0) + EMSG(_(e_au_recursive)); else { list_T *l = list_arg->vval.v_list; @@ -10662,9 +10665,12 @@ set_qf_ll_list( } } + ++recursive; if (l != NULL && action && valid_dict && set_errorlist(wp, l, action, - (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), d) == OK) + (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), + d) == OK) rettv->vval.v_number = 0; + --recursive; } #endif }