From: ilya at lebedev dot net
Operating system: Win32
PHP version: 4CVS-2003-10-04 (stable)
PHP Bug Type: Reproducible crash
Bug description: preg_replace and preg_replace_callback are crash on long matches
Description:
------------
Regular expression from the J.Friedl's "Mastering regular expressions"
book that matches pair html tags:
#<tag([^>]*)>(((?!</?tag(?:[^>]*)>).)*)</tag>#si
When between <tag> and </tag> are more then 2100 bytes (symbols), Apache
crashes.
Same happens without "s" modifier, if string has no "newline" codes.
Reproduce code:
---------------
===
preg_replace("#<tag([^>]*)>(((?!</?tag(?:[^>]*)>).)*)</tag>#si","","<tag>
2200 symbols</tag>");
===
or
===
function callback (&$m) { return "";};
preg_replace_callback
("#<tag([^>]*)>(((?!</?tag(?:[^>]*)>).)*)</tag>#si","callback","<tag> 2200
symbols </tag>");
===
Expected result:
----------------
Match blocks bigger then 2100 symbols long.
Actual result:
--------------
With more then 2100 sybmols between tags Apache crashes.
--
Edit bug report at http://bugs.php.net/?id=25754&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=25754&r=trysnapshot4
Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=25754&r=trysnapshot5
Fixed in CVS: http://bugs.php.net/fix.php?id=25754&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=25754&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=25754&r=needtrace
Try newer version: http://bugs.php.net/fix.php?id=25754&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=25754&r=support
Expected behavior: http://bugs.php.net/fix.php?id=25754&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=25754&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=25754&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=25754&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=25754&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=25754&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=25754&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=25754&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=25754&r=float