From: Bram Moolenaar Date: Mon, 18 Jun 2018 18:52:13 +0000 (+0200) Subject: patch 8.1.0073: crash when autocommands call setloclist() X-Git-Tag: v8.1.0073 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0366c0161e988e32420d2f37111a60129684905b;p=vim 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. --- diff --git a/src/quickfix.c b/src/quickfix.c index 031c6e7a6..fb1cb4e86 100644 --- 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")); diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index eade52f42..80f327d64 100644 --- 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 diff --git a/src/version.c b/src/version.c index 6ce67802d..36c57e249 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 73, /**/ 72, /**/