#36983 [Bgs->Csd]: preg_match_all incorrect due to backtrack length limit?
| From: | crisp at tweakers dot net | Date: | Wed, 05 Apr 2006 17:25:11 +0000 |
| Subject: | #36983 [Bgs->Csd]: preg_match_all incorrect due to backtrack length limit? | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-95356@lists.php.net to get a copy of this message | ||
ID: 36983
User updated by: crisp at tweakers dot net
Reported By: crisp at tweakers dot net
-Status: Bogus
+Status: Closed
Bug Type: PCRE related
Operating System: all
PHP Version: 4.4.2
New Comment:
Indeed this seems to be an issue with PCRE; version 6.6 still has this
problem so I'll try my luck with the PCRE team.
Notwithstanding I don't believe 'bogus' is the right status for this
bug since it is an actual issue, just not with PHP (although afaik PHP
still ships with PCRE version 6.4).
I'll just put this bug to 'closed'
Previous Comments:
------------------------------------------------------------------------
[2006-04-05 14:36:06] tony2001@php.net
If there is a problem, it is PCRELib problem.
Please report it to PCRELib developers.
------------------------------------------------------------------------
[2006-04-05 12:41:15] crisp at tweakers dot net
Description:
------------
It seems that when PCRE needs to backtrack more than 20 characters in
order to evaluate an OR'ed expression the results of a preg_match_all
are incorrect/incomplete.
See below code as an example.
Reproduce code:
---------------
$foo = 'foo# bar# abcdefghijklmnopqrst bla#';
echo '$foo = ', $foo, "\n";
preg_match_all('/([a-y]|z)+#/', $foo, $matches1);
preg_match_all('/([a-y]+|z)+#/', $foo, $matches2);
print_r($matches1[0]);
print_r($matches2[0]);
$foo = 'foo# bar# abcdefghijklmnopqrstu bla#';
echo '$foo = ', $foo, "\n";
preg_match_all('/([a-y]|z)+#/', $foo, $matches1);
preg_match_all('/([a-y]+|z)+#/', $foo, $matches2);
print_r($matches1[0]);
print_r($matches2[0]);
Expected result:
----------------
both expressions for both strings should give the following output:
Array
(
[0] => foo#
[1] => bar#
[2] => bla#
)
Actual result:
--------------
The last expression gives the following output on the last string:
Array
(
[0] => foo#
[1] => bar#
)
The last match on bla# is missing in the result for the preg_match_all
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=36983&edit=1