From: zeertzjq Date: Sun, 20 Feb 2022 19:05:10 +0000 (+0000) Subject: patch 8.2.4427: getchar() may return modifiers if no character is available X-Git-Tag: v8.2.4427 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad6c45f62558e03d3e3a927b3fe4dbaf30a36bef;p=vim patch 8.2.4427: getchar() may return modifiers if no character is available Problem: getchar() may return modifiers if no character is available. Solution: Do not process modifiers when there is no character. (closes #9806) --- diff --git a/src/getchar.c b/src/getchar.c index 2068ca43c..fcc9b9ac4 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -2103,7 +2103,7 @@ getchar_common(typval_T *argvars, typval_T *rettv) set_vim_var_nr(VV_MOUSE_COL, 0); rettv->vval.v_number = n; - if (IS_SPECIAL(n) || mod_mask != 0) + if (n != 0 && (IS_SPECIAL(n) || mod_mask != 0)) { char_u temp[10]; // modifier: 3, mbyte-char: 6, NUL: 1 int i = 0; diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index e2820db9c..e22a0c6ba 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -1818,6 +1818,10 @@ func Test_getchar() call assert_equal('', getcharstr(0)) call assert_equal('', getcharstr(1)) + call feedkeys("\", '') + call assert_equal("\", getchar(0)) + call assert_equal(0, getchar(0)) + call setline(1, 'xxxx') call test_setmouse(1, 3) let v:mouse_win = 9 diff --git a/src/version.c b/src/version.c index 6c5ca2bdd..c5f5c22f9 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 */ +/**/ + 4427, /**/ 4426, /**/