changeset 14111:678e326bf7eb v8.1.0073

patch 8.1.0073: crash when autocommands call setloclist() commit https://github.com/vim/vim/commit/0366c0161e988e32420d2f37111a60129684905b Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jun 18 20:52:13 2018 +0200 patch 8.1.0073: crash when autocommands call setloclist() Problem: Crash when autocommands call setloclist(). (Dominique Pelle) Solution: If the quickfix list changes then don't jump to the error.
author Christian Brabandt <cb@256bit.org>
date Mon, 18 Jun 2018 21:00:07 +0200
parents 50678c288c53
children 96654a031281
files src/quickfix.c src/testdir/test_quickfix.vim src/version.c
diffstat 3 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -6348,9 +6348,11 @@ ex_cexpr(exarg_T *eap)
 	    if (au_name != NULL)
 		apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
 						curbuf->b_fname, TRUE, curbuf);
-	    if (res > 0 && (eap->cmdidx == CMD_cexpr ||
-						eap->cmdidx == CMD_lexpr))
-		qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
+	    if (res > 0 && (eap->cmdidx == CMD_cexpr
+						   || eap->cmdidx == CMD_lexpr)
+		    && qi == ll_get_or_alloc_list(curwin))
+		// Jump to the first error if autocmds didn't free the list.
+		qf_jump(qi, 0, 0, eap->forceit);
 	}
 	else
 	    EMSG(_("E777: String or List expected"));
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -3362,3 +3362,14 @@ func Test_lbuffer_with_bwipe()
     au!
   augroup END
 endfunc
+
+func Test_setloclist_in_aucmd()
+  " This was using freed memory.
+  augroup nasty
+    au * * call setloclist(0, [], 'f')
+  augroup END
+  lexpr "x"
+  augroup nasty
+    au!
+  augroup END
+endfunc
--- 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 */
 /**/
+    73,
+/**/
     72,
 /**/
     71,