# HG changeset patch # User Christian Brabandt # Date 1529348407 -7200 # Node ID 678e326bf7eb8dce5a52337b06930dadb3cbb0f5 # Parent 50678c288c53e549884428e314036ff03fbbcc86 patch 8.1.0073: crash when autocommands call setloclist() commit https://github.com/vim/vim/commit/0366c0161e988e32420d2f37111a60129684905b Author: Bram Moolenaar 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. diff --git a/src/quickfix.c b/src/quickfix.c --- 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 --- 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 --- 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,