mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -04:00
patch 8.2.3097: crash when using "quit" at recovery prompt
Problem: Crash when using "quit" at recovery prompt and autocommands are triggered. Solution: Block autocommands when creating an empty buffer to use as the current buffer. (closes #8506)
This commit is contained in:
parent
6c72fd51a8
commit
1d97efce0c
@ -1130,7 +1130,12 @@ handle_swap_exists(bufref_T *old_curbuf)
|
|||||||
close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE, FALSE);
|
close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE, FALSE);
|
||||||
if (old_curbuf == NULL || !bufref_valid(old_curbuf)
|
if (old_curbuf == NULL || !bufref_valid(old_curbuf)
|
||||||
|| old_curbuf->br_buf == curbuf)
|
|| old_curbuf->br_buf == curbuf)
|
||||||
|
{
|
||||||
|
// Block autocommands here because curwin->w_buffer is NULL.
|
||||||
|
block_autocmds();
|
||||||
buf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
|
buf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
|
||||||
|
unblock_autocmds();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
buf = old_curbuf->br_buf;
|
buf = old_curbuf->br_buf;
|
||||||
if (buf != NULL)
|
if (buf != NULL)
|
||||||
|
@ -360,6 +360,7 @@ func Test_swap_prompt_splitwin()
|
|||||||
let buf = RunVimInTerminal('', {'rows': 20})
|
let buf = RunVimInTerminal('', {'rows': 20})
|
||||||
call term_sendkeys(buf, ":set nomore\n")
|
call term_sendkeys(buf, ":set nomore\n")
|
||||||
call term_sendkeys(buf, ":set noruler\n")
|
call term_sendkeys(buf, ":set noruler\n")
|
||||||
|
|
||||||
call term_sendkeys(buf, ":split Xfile1\n")
|
call term_sendkeys(buf, ":split Xfile1\n")
|
||||||
call TermWait(buf)
|
call TermWait(buf)
|
||||||
call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: $', term_getline(buf, 20))})
|
call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: $', term_getline(buf, 20))})
|
||||||
@ -371,8 +372,19 @@ func Test_swap_prompt_splitwin()
|
|||||||
call TermWait(buf)
|
call TermWait(buf)
|
||||||
call WaitForAssert({-> assert_match('^1$', term_getline(buf, 20))})
|
call WaitForAssert({-> assert_match('^1$', term_getline(buf, 20))})
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
|
|
||||||
|
" This caused Vim to crash when typing "q".
|
||||||
|
" TODO: it does not actually reproduce the crash.
|
||||||
|
call writefile(['au BufAdd * set virtualedit=all'], 'Xvimrc')
|
||||||
|
|
||||||
|
let buf = RunVimInTerminal('-u Xvimrc Xfile1', {'rows': 20, 'wait_for_ruler': 0})
|
||||||
|
call TermWait(buf)
|
||||||
|
call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:', term_getline(buf, 20))})
|
||||||
|
call term_sendkeys(buf, "q")
|
||||||
|
|
||||||
%bwipe!
|
%bwipe!
|
||||||
call delete('Xfile1')
|
call delete('Xfile1')
|
||||||
|
call delete('Xvimrc')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_swap_symlink()
|
func Test_swap_symlink()
|
||||||
|
@ -755,6 +755,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3097,
|
||||||
/**/
|
/**/
|
||||||
3096,
|
3096,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user