From e1da72bdf18aa3d413c5324bccfd8dc521c217e3 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Fri, 22 Nov 2019 19:21:43 +0100 Subject: Fix #78853: preg_match() may return integer > 1 Commit 54ebebd[1] optimized the match loop, but for this case it has been overlooked, that we must only loop if we're doing global matching. [1] --- ext/pcre/php_pcre.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'ext/pcre/php_pcre.c') diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 882389e1ce..38eabe2556 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -1344,7 +1344,11 @@ matched: count = pcre2_match(pce->re, (PCRE2_SPTR)subject, subject_len, start_offset2, PCRE2_NO_UTF_CHECK | PCRE2_NOTEMPTY_ATSTART | PCRE2_ANCHORED, match_data, mctx); if (count >= 0) { - goto matched; + if (global) { + goto matched; + } else { + break; + } } else if (count == PCRE2_ERROR_NOMATCH) { /* If we previously set PCRE2_NOTEMPTY_ATSTART after a null match, this is not necessarily the end. We need to advance -- cgit v1.2.1