Skip to content

Commit

Permalink
updated for version 7.4a.042
Browse files Browse the repository at this point in the history
Problem:    Crash when BufUnload autocommands close all buffers. (Andrew
            Pimlott)
Solution:   Set curwin->w_buffer to curbuf to avoid NULL.
  • Loading branch information
brammool committed Jul 24, 2013
1 parent ad875fb commit 2b90ed2
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 1 deletion.
22 changes: 22 additions & 0 deletions src/testdir/test8.in
@@ -1,4 +1,5 @@
Test for BufWritePre autocommand that deletes or unloads the buffer.
Test for BufUnload autocommand that unloads all other buffers.

STARTTEST
:so small.vim
Expand All @@ -16,6 +17,27 @@ $r2:.,/end of/w! Xxx2 " write test file Xxx2
:bwipe test.out " remove test.out from the buffer list
:w " write it, will delete the buffer and give an error msg
:w >>test.out " Append contents of this file
:au! BufWritePre
:func CloseAll()
let i = 0
while i <= bufnr('$')
if i != bufnr('%') && bufloaded(i)
exe i . "bunload"
endif
let i += 1
endwhile
endfunc
:func WriteToOut()
edit! test.out
$put ='VimLeave done'
write
endfunc
:set viminfo='100,nviminfo
:au BufUnload * call CloseAll()
:au VimLeave * call WriteToOut()
:e small.vim
:sp mbyte.vim
:q
:qa!
ENDTEST

Expand Down
1 change: 1 addition & 0 deletions src/testdir/test8.ok
Expand Up @@ -4,3 +4,4 @@ end of Xxx
start of Xxx1
test
end of Xxx
VimLeave done
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -727,6 +727,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
42,
/**/
41,
/**/
Expand Down
7 changes: 6 additions & 1 deletion src/window.c
Expand Up @@ -2291,8 +2291,13 @@ win_close(win, free_buf)
if (only_one_window() && win_valid(win) && win->w_buffer == NULL
&& (last_window() || curtab != prev_curtab
|| close_last_window_tabpage(win, free_buf, prev_curtab)))
/* Autocommands have close all windows, quit now. */
{
/* Autocommands have close all windows, quit now. Restore
* curwin->w_buffer, otherwise writing viminfo may fail. */
if (curwin->w_buffer == NULL)
curwin->w_buffer = curbuf;
getout(0);
}

/* Autocommands may have closed the window already, or closed the only
* other window or moved to another tab page. */
Expand Down

0 comments on commit 2b90ed2

Please sign in to comment.