#40812 [Com]: PHP sometimes returns blank document when allocating too much memory

From: Date: Tue, 17 Apr 2007 13:01:32 +0000
Subject: #40812 [Com]: PHP sometimes returns blank document when allocating too much memory
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-111594@lists.php.net to get a copy of this message
ID: 40812 Comment by: mick at aplicube dot com Reported By: chmelar at busche dot sk Status: No Feedback Bug Type: Unknown/Other Function Operating System: Fedora Linux 2.6 PHP Version: 5.2.1 New Comment: Win2K SVP4 PHP5.2.1 Apache2.2.4 MySQL 5.0.37 CMS joomla1.5 debugged [i.e. removed errors found so far] Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 16 bytes) in C:\7\htdocs\libraries\phputf8\utils\unicode.php on line 49 line where php is moaning.. $in = ord($str{$i}); Sometimes an empty page will occure but with correct html...head...body tags etc. Same phenomen as in the previous message description explained. Latest php ...the same fatal error will occure [on my system]. php 5.1.x, php5.2.0 won't produce this error. Previous Comments: ------------------------------------------------------------------------ [2007-03-23 01:00:01] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2007-03-15 13:02:00] tony2001@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip ------------------------------------------------------------------------ [2007-03-15 08:50:08] chmelar at busche dot sk Description: ------------ Sometimes when PHP tries to allocate too much memory, it crashes without an error message and produces a blank screen. Reproduce code: --------------- This occurs after running this script (it doesn't crash always, so try to refresh 5-10 times until it returns nothing (zero sized reply)): <?php function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { ini_set('memory_limit', '10M'); echo "Error occured"; die(); }; ini_set('memory_limit', '1M'); error_reporting(E_ALL | E_STRICT); set_error_handler('myErrorHandler'); $a=array(); $aLen=rand(2048,65535); echo "trying to initialize an array with ".$aLen." items (randomly generated)... \n"; $i=0; while ($i<$aLen && (rand(1,65534)<65533 || rand(1,65534)>2)) { $varName='a_'.chr(rand(65,90)).chr(rand(65,90)).chr(rand(65,90)).chr(rand(65,90)).chr(rand(65,90)); $$varName=rand(0,255); //$a[]=rand(0,255); $i++; }; echo "successfuly initialized an array with ".count($a)." items. please refresh"; ?> Expected result: ---------------- Usually (in normal cases) the error handler should write "Error occured" to the output and end the script. Looks like the code allocates small chunks of memory (about 40 bytes), and when it tries to allocate the next chunk and it doesn't have enough memory, it tries to trigger an error, BUT there is the problem that by triggering error 4 or 5 parameters are passed to the error handler - that means PHP needs to allocate space for them. But the error message text itself has more than 100 charactes, so it doesn't fit to the free memory block and PHP just crashes. So it seems to be a PHP bug. Actual result: -------------- Zero sized reply (MS IE7) or blank screen (FF 1.5) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40812&edit=1

« previous php.bugs (#111594) next »