changeset 27802:9b01fea87065 v8.2.4427

patch 8.2.4427: getchar() may return modifiers if no character is available Commit: https://github.com/vim/vim/commit/ad6c45f62558e03d3e3a927b3fe4dbaf30a36bef Author: zeertzjq <zeertzjq@outlook.com> Date: Sun Feb 20 19:05:10 2022 +0000 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 https://github.com/vim/vim/issues/9806)
author Bram Moolenaar <Bram@vim.org>
date Sun, 20 Feb 2022 20:15:03 +0100
parents db4fb9a86f79
children 9824bd8b05df
files src/getchar.c src/testdir/test_functions.vim src/version.c
diffstat 3 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2103,7 +2103,7 @@ getchar_common(typval_T *argvars, typval
     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;
--- 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("\<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
--- 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 */
 /**/
+    4427,
+/**/
     4426,
 /**/
     4425,