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
 }
--- 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,