Problem: Can't handle large value for %{nr}v in regexp. (Kuang-che Wu)
Solution: Give an error if the value is too large. (closes #3948)
}
if (c == 'l' || c == 'c' || c == 'v')
{
+ int limit = INT_MAX;
+
if (c == 'l')
{
/* \%{n}l \%{n}<l \%{n}>l */
EMIT(cmp == '<' ? NFA_COL_LT :
cmp == '>' ? NFA_COL_GT : NFA_COL);
else
+ {
/* \%{n}v \%{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;
}
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 908,
/**/
907,
/**/