From f754fe6a3d5384b5146c38a32db6da9d46e00c40 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 14 Jul 2022 17:06:12 +0100 Subject: [PATCH] patch 9.0.0051: using CTRL-C wih :append may hang Vim Problem: Using CTRL-C wih :append may hang Vim. Solution: Reset got_int. (closes #10729, closes #10728) --- src/ex_getln.c | 2 ++ src/testdir/test_ex_mode.vim | 23 +++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 27 insertions(+) diff --git a/src/ex_getln.c b/src/ex_getln.c index 8dc03dc33..dd538941e 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1786,6 +1786,8 @@ getcmdline_int( // that occurs while typing a command should // cause the command not to be executed. + got_int = FALSE; // avoid infinite Ctrl-C loop in Ex mode + // Trigger SafeState if nothing is pending. may_trigger_safestate(xpc.xp_numfiles <= 0); diff --git a/src/testdir/test_ex_mode.vim b/src/testdir/test_ex_mode.vim index fafdda8de..50bc1db99 100644 --- a/src/testdir/test_ex_mode.vim +++ b/src/testdir/test_ex_mode.vim @@ -145,6 +145,29 @@ func Test_Ex_global() bwipe! endfunc +" Test for pressing Ctrl-C in :append inside a loop in Ex mode +" This used to hang Vim +func Test_Ex_append_in_loop() + CheckRunVimInTerminal + let buf = RunVimInTerminal('', {'rows': 6}) + + call term_sendkeys(buf, "gQ") + call term_sendkeys(buf, "for i in range(1)\") + call term_sendkeys(buf, "append\") + call WaitForAssert({-> assert_match(': append', term_getline(buf, 5))}, 1000) + call term_sendkeys(buf, "\") + call term_wait(buf) + call term_sendkeys(buf, "foo\") + call WaitForAssert({-> assert_match('foo', term_getline(buf, 5))}, 1000) + call term_sendkeys(buf, ".\") + call WaitForAssert({-> assert_match('.', term_getline(buf, 5))}, 1000) + call term_sendkeys(buf, "endfor\") + call term_sendkeys(buf, "vi\") + call WaitForAssert({-> assert_match('foo', term_getline(buf, 1))}, 1000) + + call StopVimInTerminal(buf) +endfunc + " In Ex-mode, a backslash escapes a newline func Test_Ex_escape_enter() call feedkeys("gQlet l = \"a\\\b\"\vi\", 'xt') diff --git a/src/version.c b/src/version.c index 8df434140..a6a80b671 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 51, /**/ 50, /**/ -- 2.40.0