summaryrefslogtreecommitdiffstats
path: root/src/getchar.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-09-15 18:29:39 +0200
committerBram Moolenaar <Bram@vim.org>2015-09-15 18:29:39 +0200
commit2455c4ede8d4ff6f0754977b548708eec08869eb (patch)
treeb7d7b05f47748ec495cbc739a2ed7378b5246722 /src/getchar.c
parent3b59755862f4604ded8155404a1fe4c84c606829 (diff)
patch 7.4.870v7.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)
Diffstat (limited to 'src/getchar.c')
-rw-r--r--src/getchar.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/getchar.c b/src/getchar.c
index 87588a93ac..f4ec991b09 100644
--- 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;