Mercurial > vim
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