From 89378d8a0f995dd46081194bcf81c5d6ea016494 Mon Sep 17 00:00:00 2001 From: Karl Williamson Date: Wed, 9 Nov 2011 10:42:10 -0700 Subject: regexec.c: Stop looking for match even sooner This revised commit e067297c376fbbb5a0dc8428c65d922f11e1f4c6 slightly so that we round up to get the search stopping point. We aren't matching partial characters, so if we were to match 3+1/3 characters, we really have to match 4 characters. --- regexec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'regexec.c') diff --git a/regexec.c b/regexec.c index 4b8af5232b..56d1a5c856 100644 --- a/regexec.c +++ b/regexec.c @@ -1552,10 +1552,10 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s, * fact that the Latin 1 folds are already determined, and the * only multi-char fold in that range is the sharp-s folding to * 'ss'. Thus, a pattern character can match as little as 1/3 of a - * string character. Adjust lnc accordingly, always matching at - * least 1 */ + * string character. Adjust lnc accordingly, rounding up, so that + * if we need to match at least 4+1/3 chars, that really is 5. */ expansion = (utf8_target) ? UTF8_MAX_FOLD_CHAR_EXPAND : 2; - lnc = (lnc < expansion) ? 1 : lnc / expansion; + lnc = (lnc + expansion - 1) / expansion; /* As in the non-UTF8 case, if we have to match 3 characters, and * only 2 are left, it's guaranteed to fail, so don't start a -- cgit v1.2.1