Bug #62983 [NEW]: if user exceeds post_max_size, script may hang on output

From: Date: Fri, 31 Aug 2012 15:13:15 +0000
Subject: Bug #62983 [NEW]: if user exceeds post_max_size, script may hang on output
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-173055@lists.php.net to get a copy of this message
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



Thread (5 messages)

« previous php.bugs (#173055) next »