diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-07-04 09:18:19 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-07-04 09:22:50 -0400 |
commit | 0d75b0d8d470fdf763743823feb6d9013eff069c (patch) | |
tree | 627a666e896a110455623114846c78875852853b | |
parent | ce4d424bfc92d7308d1edecd723d2f20cef6c2c0 (diff) | |
download | rneovim-0d75b0d8d470fdf763743823feb6d9013eff069c.tar.gz rneovim-0d75b0d8d470fdf763743823feb6d9013eff069c.tar.bz2 rneovim-0d75b0d8d470fdf763743823feb6d9013eff069c.zip |
vim-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 vim/vim#8506)
https://github.com/vim/vim/commit/1d97efce0ce31ddf0dd4c1ae2228ef4caee6880c
-rw-r--r-- | src/nvim/buffer.c | 3 | ||||
-rw-r--r-- | src/nvim/testdir/test_swap.vim | 12 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index f1f32076bf..8decd02b3a 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -901,7 +901,10 @@ void handle_swap_exists(bufref_T *old_curbuf) if (old_curbuf == NULL || !bufref_valid(old_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); + unblock_autocmds(); } else { buf = old_curbuf->br_buf; } diff --git a/src/nvim/testdir/test_swap.vim b/src/nvim/testdir/test_swap.vim index f27920d20f..3c191cd7c7 100644 --- a/src/nvim/testdir/test_swap.vim +++ b/src/nvim/testdir/test_swap.vim @@ -319,6 +319,7 @@ func Test_swap_prompt_splitwin() let buf = RunVimInTerminal('', {'rows': 20}) call term_sendkeys(buf, ":set nomore\n") call term_sendkeys(buf, ":set noruler\n") + call term_sendkeys(buf, ":split Xfile1\n") call term_wait(buf) call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: $', term_getline(buf, 20))}) @@ -330,8 +331,19 @@ func Test_swap_prompt_splitwin() call term_wait(buf) call WaitForAssert({-> assert_match('^1$', term_getline(buf, 20))}) 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! call delete('Xfile1') + call delete('Xvimrc') endfunc func Test_swap_symlink() |