summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-11-14 20:21:55 +0100
committerBram Moolenaar <Bram@vim.org>2020-11-14 20:21:55 +0100
commit02764713a715c55e316e2bef5c9ade2fb767ee78 (patch)
tree64ab70ce1fa3c4af464254695b54aa46529fac82
parent33aecb1f2c85711d53858b71f5f3c2cbe076435f (diff)
patch 8.2.1985: crash when closing terminal popup with <Cmd> mappingv8.2.1985
Problem: Crash when closing terminal popup with <Cmd> mapping. Solution: Check b_term is not NULL. (closes #7294)
-rw-r--r--src/terminal.c4
-rw-r--r--src/testdir/test_terminal.vim12
-rw-r--r--src/version.c2
3 files changed, 15 insertions, 3 deletions
diff --git a/src/terminal.c b/src/terminal.c
index 4e2ff14dda..7f38bf75ca 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -2527,7 +2527,7 @@ terminal_loop(int blocking)
while (blocking || vpeekc_nomap() != NUL)
{
#ifdef FEAT_GUI
- if (!curbuf->b_term->tl_system)
+ if (curbuf->b_term != NULL && !curbuf->b_term->tl_system)
#endif
// TODO: skip screen update when handling a sequence of keys.
// Repeat redrawing in case a message is received while redrawing.
@@ -2542,8 +2542,6 @@ terminal_loop(int blocking)
restore_cursor = TRUE;
raw_c = term_vgetc();
-if (raw_c > 0)
- ch_log(NULL, "terminal_loop() got %d", raw_c);
if (!term_use_loop_check(TRUE) || in_terminal_loop != curbuf->b_term)
{
// Job finished while waiting for a character. Push back the
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 137a8a6056..8d68ceb5b4 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1225,6 +1225,18 @@ func Test_open_term_from_cmd()
call delete('Xopenterm')
endfunc
+func Test_terminal_popup_with_cmd()
+ " this was crashing
+ let buf = term_start(&shell, #{hidden: v:true})
+ let s:winid = popup_create(buf, {})
+ tnoremap <F3> <Cmd>call popup_close(s:winid)<CR>
+ call feedkeys("\<F3>", 'xt')
+
+ tunmap <F3>
+ exe 'bwipe! ' .. buf
+ unlet s:winid
+endfunc
+
func Check_dump01(off)
call assert_equal('one two three four five', trim(getline(a:off + 1)))
call assert_equal('~ Select Word', trim(getline(a:off + 7)))
diff --git a/src/version.c b/src/version.c
index 8d21a4aab4..8174386fec 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1985,
+/**/
1984,
/**/
1983,