From 02764713a715c55e316e2bef5c9ade2fb767ee78 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 14 Nov 2020 20:21:55 +0100 Subject: [PATCH] patch 8.2.1985: crash when closing terminal popup with mapping Problem: Crash when closing terminal popup with mapping. Solution: Check b_term is not NULL. (closes #7294) --- src/terminal.c | 4 +--- src/testdir/test_terminal.vim | 12 ++++++++++++ src/version.c | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/terminal.c b/src/terminal.c index 4e2ff14dd..7f38bf75c 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 137a8a605..8d68ceb5b 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 call popup_close(s:winid) + call feedkeys("\", 'xt') + + tunmap + 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 8d21a4aab..8174386fe 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1985, /**/ 1984, /**/ -- 2.40.0