Permalink
Browse files

patch 8.0.1402: crash with nasty autocommand

Problem:    Crash with nasty autocommand. (gy741, Dominique Pelle)
Solution:   Check that the new current buffer isn't wiped out. (closes #2447)
  • Loading branch information...
brammool committed Dec 18, 2017
1 parent cb89c98 commit 9bca805ec49eb0d2d0d0b2093f418ff425500169
Showing with 24 additions and 9 deletions.
  1. +14 −9 src/buffer.c
  2. +8 −0 src/testdir/test_autocmd.vim
  3. +2 −0 src/version.c
View
@@ -1665,7 +1665,8 @@ set_curbuf(buf_T *buf, int action)
#ifdef FEAT_SYN_HL
long old_tw = curbuf->b_p_tw;
#endif
bufref_T bufref;
bufref_T newbufref;
bufref_T prevbufref;
setpcmark();
if (!cmdmod.keepalt)
@@ -1675,18 +1676,22 @@ set_curbuf(buf_T *buf, int action)
/* Don't restart Select mode after switching to another buffer. */
VIsual_reselect = FALSE;
/* close_windows() or apply_autocmds() may change curbuf */
/* close_windows() or apply_autocmds() may change curbuf and wipe out "buf"
*/
prevbuf = curbuf;
set_bufref(&bufref, prevbuf);
set_bufref(&prevbufref, prevbuf);
set_bufref(&newbufref, buf);
#ifdef FEAT_AUTOCMD
/* Autocommands may delete the curren buffer and/or the buffer we wan to go
* to. In those cases don't close the buffer. */
if (!apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf)
|| (bufref_valid(&prevbufref)
&& bufref_valid(&newbufref)
# ifdef FEAT_EVAL
|| (bufref_valid(&bufref) && !aborting())
# else
|| bufref_valid(&bufref)
&& !aborting()
# endif
)
))
#endif
{
#ifdef FEAT_SYN_HL
@@ -1696,9 +1701,9 @@ set_curbuf(buf_T *buf, int action)
if (unload)
close_windows(prevbuf, FALSE);
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
if (bufref_valid(&bufref) && !aborting())
if (bufref_valid(&prevbufref) && !aborting())
#else
if (bufref_valid(&bufref))
if (bufref_valid(&prevbufref))
#endif
{
win_T *previouswin = curwin;
@@ -1163,3 +1163,11 @@ func Test_TextYankPost()
unlet g:event
bwipe!
endfunc
func Test_nocatch_wipe_all_buffers()
" Real nasty autocommand: wipe all buffers on any event.
au * * bwipe *
call assert_fails('next x', 'E93')
bwipe
au!
endfunc
View
@@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1402,
/**/
1401,
/**/

0 comments on commit 9bca805

Please sign in to comment.