ID:               25754
 Comment by:       coldrain at workingonit dot org
 Reported By:      ilya at lebedev dot net
 Status:           Open
 Bug Type:         Documentation problem
 Operating System: Win32
 PHP Version:      4CVS-2003-10-04 (stable)
 New Comment:

It seems the bug I reported (http://bugs.php.net/bug.php?id=26020) is a
duplicate of this one. In this (now bogus) bug report there is more
info on a similar, yet different case.
It should be noted that the maximum amount of data between pairs of
tags in this PCRE case is not a constant as it differs between
platforms, even with the same installed PHP versions. On a Debian box,
I was able to process about 11650 bytes between to matching div tags.


Previous Comments:
------------------------------------------------------------------------

[2003-10-04 22:04:17] [EMAIL PROTECTED]

>From http://www.pcre.org/pcre.txt, LIMITATIONS:

"The maximum length of a subject string is the largest  
positive number that an integer variable can hold. However, 
PCRE uses recursion to handle subpatterns and indefinite  
repetition. This  means  that the available stack space may 
limit the size of a subject string that can be processed  by  
certain patterns."

This propably should be mentioned in our manual pages too.

(On Linux, the example script worked fine with 9344 chars between the
tags, but 9345 crashed)


------------------------------------------------------------------------

[2003-10-04 19:56:54] ilya at lebedev dot net

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 this bug report at http://bugs.php.net/?id=25754&edit=1

Reply via email to