# HG changeset patch # User Christian Brabandt # Date 1529256606 -7200 # Node ID c97e9edfc6b4c8c3a2bf046ee973c509366bce47 # Parent 8729adac8e042be94fd087f6009787b89c806093 patch 8.1.0068: nasty autocommands can still cause using freed memory commit https://github.com/vim/vim/commit/2f82ca7d79148ae931bf28a747ede06ba8a65de8 Author: Bram Moolenaar 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. diff --git a/src/evalfunc.c b/src/evalfunc.c --- 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 } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 68, +/**/ 67, /**/ 66,