ID:               37239
 Comment by:       beagle-php at sector99 dot com
 Reported By:      dimox at inbox dot lv
 Status:           Open
 Bug Type:         Reproducible crash
 Operating System: Windows XP Pro SP2
 PHP Version:      4.4.2
 New Comment:

I have used Dimox's code on a Windows 2000 server running IIS and PHP
4.4.2 and have reproduced the problem. The regular expression commands
on this server combination seem to be susceptible to crashing like
this.


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

[2006-05-02 11:03:31] dimox at inbox dot lv

Can I get trial version of MSVC6? If it exist, can you add link for me?
I'm only web-programmer and I has no tools for C++
development/debugging. 

Maybe you can run file test_bug.php on your oun PC with this tools and
generate this debug backtrace?
------------
test_bug.php
------------ 
<?php
$text = '<block name="name1">
  something
    <block name="name2">1223567890 qwertyuiop[[[]asdfghjkl;rrrr
\zxcvbnm,./zxcvbnmm, xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;rrrr \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
<blockend>
<blockend>';

$regex='/\<block\s*name=\"([^\"]+)\"\s*\>((.(?!\<block\s))+?)\<blockend\>/is';

while(preg_match_all($regex, $text, $block_matches,PREG_SET_ORDER)){
  foreach($block_matches AS $block)
        echo '<pre>'; print_r($block_matches);
  $text = preg_replace($regex, '', $text);
}
?>

This file causes 100% crash on my Win32 server. I realy want to help
PHP better.

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

[2006-04-29 01:42:06] [EMAIL PROTECTED]

Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php for *NIX and
http://bugs.php.net/bugs-generating-backtrace-win32.php for Win32

Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.



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

[2006-04-28 19:58:03] dimox at inbox dot lv

While i symlificate the code i forgot to remove \%\> from example and
posted text for parsig was too small to cause error. I found, that
block content must be more tan 1330-1360 simbols to couse script crash
- until this values it works fine! I increased all "memory size" values
in php.ini and in the code, but problem still exist. 

Changed code:

$text = '<block name="name1">
  something
    <block name="name2">1223567890 qwertyuiop[[[]asdfghjkl;’’’’
\zxcvbnm,./zxcvbnmm, xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1223567890 qwertyuiop[[[]asdfghjkl;’’’’ \zxcvbnm,./zxcvbnmm,
xsxasxaxaxae dsvvzs vsv  bdbdb<> <>><<<
1234567890123456789012345678901234567890123456789012345678901
<blockend>
<blockend>';

$regex
='/\<block\s*name=\"([^\"]+)\"\s*\>((.(?!\<block\s))+?)\<blockend\>/is';

while(preg_match_all($regex, $text, $block_matches,PREG_SET_ORDER)){
  ...
  $text = preg_replace($regex, '', $text);
}

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

[2006-04-28 18:41:53] dimox at inbox dot lv

Description:
------------
Regxp couses PHP script crach on Windows. On Linux Server it works
fine, but I use Windows server on my PC for development. 
I try this code on my own PC with Apache/1.3.34 (Win32) PHP/4.4.2 and
on another PC with Apache/1.3.34 (Win32) PHP/4.4.1. On my PC this code
souses Apache crash, but on another PC this code couses only script
crash. I looking information about this bug anywere, but can't find
anything useful, except http://bugs.php.net/bug.php?id=27735. I try
with logs disconnection, but it doesn't change anything. 
Help ...

Reproduce code:
---------------
$regex =
'/block\s*name=\"([^\"]+)\"\s*\%\>((.(?!(block\s)))+?)\blockend/is';
while(preg_match_all($regex, $text, $block_matches, PREG_SET_ORDER)){
...
}

Expected result:
----------------
$block_matches array with results of regular expression matches. I need
in this to parse blocks like 

block name="name1"
  something
    block name="name2"
      something else
      ...
    blockend
blockend

Actual result:
--------------
"Server not found" or "The page cannot be displayed" in browser. 
After simplification of code to:
 
$regex = '/block\s*name=\"([^\"]+)\"\s*\%\>(.+?)\blockend/is';
while(preg_match_all($regex, $text, $block_matches, PREG_SET_ORDER)){
...
}

all works fine(remooved lookahead assertion). If i add () around the
'.' - script crash again.

$regex = '/block\s*name=\"([^\"]+)\"\s*\%\>((.)+?)\blockend/is';


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


-- 
Edit this bug report at http://bugs.php.net/?id=37239&edit=1

Reply via email to