changeset 7117:9946e87686c8 v7.4.870

commit https://github.com/vim/vim/commit/2455c4ede8d4ff6f0754977b548708eec08869eb Author: Bram Moolenaar <Bram@vim.org> Date: Tue Sep 15 18:29:39 2015 +0200 patch 7.4.870 Problem: May get into an invalid state when using getchar() in an expression mapping. Solution: Anticipate mod_mask to change. (idea by Yukihiro Nakadaira)
author Christian Brabandt <cb@256bit.org>
date Tue, 15 Sep 2015 18:30:04 +0200
parents d8cbf271f0e8
children b32e6e4f7aaf
files src/getchar.c src/version.c
diffstat 2 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1630,13 +1630,16 @@ vgetc()
       last_recorded_len = 0;
       for (;;)			/* this is done twice if there are modifiers */
       {
+	int did_inc = FALSE;
+
 	if (mod_mask)		/* no mapping after modifier has been read */
 	{
 	    ++no_mapping;
 	    ++allow_keys;
+	    did_inc = TRUE;	/* mod_mask may change value */
 	}
 	c = vgetorpeek(TRUE);
-	if (mod_mask)
+	if (did_inc)
 	{
 	    --no_mapping;
 	    --allow_keys;
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    870,
+/**/
     869,
 /**/
     868,