From: bkfake-php at yahoo dot com
Operating system: Windows
PHP version: 5.4.6
Package: Output Control
Bug Type: Bug
Bug description:if user exceeds post_max_size, script may hang on output
Description:
------------
set post_max_size in php.ini to something relatively small (for easy
testing)
say 2M or 3M
upload_max_filesize setting does not matter...
though for practical reasons it should be smaller than
post_max_size
if posted data exceeds post_max_size... output seems to be limited to under
24500 - 33000 bytes (a modest amount of html) as soon as that unknown
amount is exceeded, the script "hangs"?
* next statement after the triggering echo (or print or file passthru,
etc) is not executed.
* headers not received by browser,
* max_execution_time not reached
* no errors generated (other than Warning "POST Content-Length of xxxx
bytes exceeds the limit of xxxx bytes in Unknown on line 0,")
firefox just sits spinning "Sending request to localhost..."
IE says waiting for....
Test script:
---------------
<?php
/**
* set post_max_size in php.ini to something relatively small (for easy
testing)
* say 2M or 3M
* upload_max_filesize setting does not matter...
* though for practical reasons it should be smaller than
post_max_size
*
* now using this script, upload a file that's over that limit.
*/
if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
/**
* change $output_length to trigger the bug
* on one system I tested, the magic number is 24506.. crashes at
24507
* on another the number is 32742.. crashes at 32743
* what limit am I encountering?
* this number appears to be arbitrary... varying by system and
* I think the scripts memory usage also affects how much may be
returned
* the number seems to remain static to that system..
* but if I change this script, the number may change
* (ie, changing the length of $repeat_str below)
*/
$output_length = 24593; // increase/decrease to
trigger/not-trigger the
bug
//
$repeat_str = 'Too much arbitrary output and this script will hang. Why
so?'."\n";
// even changing the length of $repeat_str seems to affect the total
amount that can be output
// perhaps due to change in memory usage?
header('Content-Length: '.$output_length); // adding/removing
headers does
not have any effect
$strlen_repeat_str = strlen($repeat_str);
// output $repeat_str until out $strlen_output = $output_length
$strlen_output = 0; // including closing div;
while ( $strlen_output < $output_length )
{
$diff = $output_length - $strlen_output;
if ( $diff >= $strlen_repeat_str )
{
$strlen_output += $strlen_repeat_str;
echo $repeat_str;
}
else
{
$strlen_output += $diff;
echo substr($repeat_str,0,$diff);
}
}
// when we go over $output_length, script seems to hang on echo
statement...
// headers not received by browser,
// max_execution_time not reached
// no errors generated (other than "PHP Warning localhost
POST
Content-Length of xxxx bytes exceeds the limit of xxxx bytes in Unknown on
line 0,")
// firefox just sits spinning "Sending request to localhost..."
// IE says waiting for....
}
else
{
echo 'uploading a file with a size over '.ini_get('post_max_size').' =
potential crash';
?>
<form enctype="multipart/form-data" action="" method="post" >
<input type="file" name="file" />
<input type="submit" value="submit me!" />
</form>
<?php
}
?>
Expected result:
----------------
initial file-upload form...
after submitting the response should be the string
"Too much arbitrary output and this script will hang. Why so?" repeated
400+times
Actual result:
--------------
script hangs -> nothing returned
--
Edit bug report at https://bugs.php.net/bug.php?id=62983&edit=1
--
Try a snapshot (PHP 5.4):
https://bugs.php.net/fix.php?id=62983&r=trysnapshot54
Try a snapshot (PHP 5.3):
https://bugs.php.net/fix.php?id=62983&r=trysnapshot53
Try a snapshot (trunk):
https://bugs.php.net/fix.php?id=62983&r=trysnapshottrunk
Fixed in SVN:
https://bugs.php.net/fix.php?id=62983&r=fixed
Fixed in SVN and need be documented:
https://bugs.php.net/fix.php?id=62983&r=needdocs
Fixed in release:
https://bugs.php.net/fix.php?id=62983&r=alreadyfixed
Need backtrace:
https://bugs.php.net/fix.php?id=62983&r=needtrace
Need Reproduce Script:
https://bugs.php.net/fix.php?id=62983&r=needscript
Try newer version:
https://bugs.php.net/fix.php?id=62983&r=oldversion
Not developer issue:
https://bugs.php.net/fix.php?id=62983&r=support
Expected behavior:
https://bugs.php.net/fix.php?id=62983&r=notwrong
Not enough info:
https://bugs.php.net/fix.php?id=62983&r=notenoughinfo
Submitted twice:
https://bugs.php.net/fix.php?id=62983&r=submittedtwice
register_globals:
https://bugs.php.net/fix.php?id=62983&r=globals
PHP 4 support discontinued:
https://bugs.php.net/fix.php?id=62983&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=62983&r=dst
IIS Stability:
https://bugs.php.net/fix.php?id=62983&r=isapi
Install GNU Sed:
https://bugs.php.net/fix.php?id=62983&r=gnused
Floating point limitations:
https://bugs.php.net/fix.php?id=62983&r=float
No Zend Extensions:
https://bugs.php.net/fix.php?id=62983&r=nozend
MySQL Configuration Error:
https://bugs.php.net/fix.php?id=62983&r=mysqlcfg