vim-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)

2455c4ede8
This commit is contained in:
Jurica Bradaric 2016-02-20 19:11:25 +01:00
parent 44024f2c65
commit 5b263ac6ad
2 changed files with 7 additions and 5 deletions

View File

@ -1380,13 +1380,15 @@ int vgetc(void)
} else { } else {
mod_mask = 0x0; mod_mask = 0x0;
last_recorded_len = 0; last_recorded_len = 0;
for (;; ) { /* this is done twice if there are modifiers */ for (;; ) { // this is done twice if there are modifiers
if (mod_mask) { /* no mapping after modifier has been read */ bool did_inc = false;
if (mod_mask) { // no mapping after modifier has been read
++no_mapping; ++no_mapping;
++allow_keys; ++allow_keys;
did_inc = true; // mod_mask may change value
} }
c = vgetorpeek(TRUE); c = vgetorpeek(true);
if (mod_mask) { if (did_inc) {
--no_mapping; --no_mapping;
--allow_keys; --allow_keys;
} }

View File

@ -420,7 +420,7 @@ static int included_patches[] = {
// 873 NA // 873 NA
// 872 NA // 872 NA
// 871, // 871,
// 870, 870,
// 869 NA // 869 NA
868, 868,
// 867 NA // 867 NA