patch 8.2.4427: getchar() may return modifiers if no character is available v8.2.4427
authorzeertzjq <zeertzjq@outlook.com>
Sun, 20 Feb 2022 19:05:10 +0000 (19:05 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 20 Feb 2022 19:05:10 +0000 (19:05 +0000)
Problem:    getchar() may return modifiers if no character is available.
Solution:   Do not process modifiers when there is no character. (closes #9806)

src/getchar.c
src/testdir/test_functions.vim
src/version.c

index 2068ca43c9fd51a94d767496716fed21a3563b3d..fcc9b9ac427480e978afb7a5b83b84e62634381c 100644 (file)
@@ -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;
index e2820db9c9e5deeb1f165300a6507eacde0402e7..e22a0c6ba4c49b89deb46d79ac98401a8d7da23e 100644 (file)
@@ -1818,6 +1818,10 @@ func Test_getchar()
   call assert_equal('', getcharstr(0))
   call assert_equal('', getcharstr(1))
 
+  call feedkeys("\<M-F2>", '')
+  call assert_equal("\<M-F2>", getchar(0))
+  call assert_equal(0, getchar(0))
+
   call setline(1, 'xxxx')
   call test_setmouse(1, 3)
   let v:mouse_win = 9
index 6c5ca2bdde2e9a10019a9e56110908ca3c02e8d0..c5f5c22f90ac333c3ca3e3beefe51d01cb54f809 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4427,
 /**/
     4426,
 /**/