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)
diff --git a/src/getchar.c b/src/getchar.c
index 87588a9..f4ec991 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1630,13 +1630,16 @@
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;