#45488 [Opn->Bgs]: preg_replace failed when the $subject parameter length exceeds 100009
ID: 45488
Updated by: felipe@php.net
Reported By: webez dot cn at gmail dot com
-Status: Open
+Status: Bogus
Bug Type: PCRE related
Operating System: *
PHP Version: 5.2.6
New Comment:
This is expected, it when fails preg_last_error() returns: int(2)
That means PREG_BACKTRACK_LIMIT_ERROR.
See
http://docs.php.net/manual/en/pcre.configuration.php#ini.pcre.backtrack-limit
Previous Comments:
------------------------------------------------------------------------
[2008-07-11 17:57:39] webez dot cn at gmail dot com
Description:
------------
if the $subject parameter's length exceeds 100009, str_replace has no
return value.
This has been reproduced on windows 2003 with php 5.2.6 and Linux with
php 5.2.5
PS:
If there is backslash in the $subject parameter and $pattern parameter,
the critical poiont will change, the maximum string length to reproduce
this bug will increase.
Reproduce code:
---------------
<?
$dummyText=str_pad("[start]",100016-strlen("[start][end]"),"*")."[end]";
str_replace_test($dummyText);
$dummyText=str_pad("[start]",100017-strlen("[start][end]"),"*")."[end]";
str_replace_test($dummyText);
function str_replace_test($dummyText){
$result=preg_replace("/\[start\](.+?)\[end\]/eis","passed",$dummyText);
$result==""?$result="failed":true;
echo "str_replace with length: ".strlen($dummyText)."
".$result."<br>";
}
?>
Expected result:
----------------
str_replace with length: 100009 passed
str_replace with length: 100010 passed
Actual result:
--------------
str_replace with length: 100009 passed
str_replace with length: 100010 failed
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45488&edit=1
Thread (3 messages)