diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 18bc8d9a60..3e2ef93fa1 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1550,6 +1550,8 @@ nfa_regatom(void) } if (c == 'l' || c == 'c' || c == 'v') { + int limit = INT_MAX; + if (c == 'l') { /* \%{n}l \%{n}l */ @@ -1563,16 +1565,17 @@ nfa_regatom(void) EMIT(cmp == '<' ? NFA_COL_LT : cmp == '>' ? NFA_COL_GT : NFA_COL); else + { /* \%{n}v \%{n}v */ EMIT(cmp == '<' ? NFA_VCOL_LT : cmp == '>' ? NFA_VCOL_GT : NFA_VCOL); -#if VIM_SIZEOF_INT < VIM_SIZEOF_LONG - if (n > INT_MAX) + limit = INT_MAX / MB_MAXBYTES; + } + if (n >= limit) { emsg(_("E951: \\% value too large")); return FAIL; } -#endif EMIT((int)n); break; } diff --git a/src/version.c b/src/version.c index a66e8b6adf..a6d7addc69 100644 --- a/src/version.c +++ b/src/version.c @@ -783,6 +783,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 908, /**/ 907, /**/