summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDharman <tekiela246@gmail.com>2021-03-15 12:21:44 +0000
committerNikita Popov <nikita.ppv@gmail.com>2021-03-15 14:47:45 +0100
commit282355efd5d53ba180d30794737c33898031104e (patch)
tree9668eabf25166f36ebda5752a49fc6699155fd3c
parentc93b461ad70e341f1b01f5910f3cfc3055a3941e (diff)
downloadphp-git-282355efd5d53ba180d30794737c33898031104e.tar.gz
Fix bug #80866
Closes GH-6774.
-rw-r--r--NEWS4
-rw-r--r--ext/pcre/php_pcre.c4
-rw-r--r--ext/pcre/tests/bug80866.phpt12
3 files changed, 20 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 64b29572af..264991b16b 100644
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,10 @@ PHP NEWS
- opcache:
. Fixed bug #80805 (create simple class and get error in opcache.so). (Nikita)
+- PCRE:
+ . Fixed bug #80866 (preg_split ignores limit flag when pattern with \K has
+ 0-width fullstring match). (Kamil Tekiela)
+
- phpdbg:
. Fixed bug #80757 (Exit code is 0 when could not open file). (Felipe)
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index 39896bb07b..19b1069978 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -2644,6 +2644,10 @@ matched:
the match again at the same point. If this fails (picked up above) we
advance to the next character. */
if (start_offset == offsets[0]) {
+ /* Get next piece if no limit or limit not yet reached and something matched*/
+ if (limit_val != -1 && limit_val <= 1) {
+ break;
+ }
count = pcre2_match(pce->re, (PCRE2_SPTR)subject, ZSTR_LEN(subject_str), start_offset,
PCRE2_NO_UTF_CHECK | PCRE2_NOTEMPTY_ATSTART | PCRE2_ANCHORED, match_data, mctx);
if (count >= 0) {
diff --git a/ext/pcre/tests/bug80866.phpt b/ext/pcre/tests/bug80866.phpt
new file mode 100644
index 0000000000..1de5390cb3
--- /dev/null
+++ b/ext/pcre/tests/bug80866.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #80866 preg_split ignores limit flag when pattern with \K has 0-width fullstring match
+--FILE--
+<?php
+var_export(preg_split('~.{3}\K~', 'abcdefghijklm', 3));
+?>
+--EXPECT--
+array (
+ 0 => 'abc',
+ 1 => 'def',
+ 2 => 'ghijklm',
+)