From:             
Operating system: CentOS5.5 32bits
PHP version:      5.2.14
Package:          Output Control
Bug Type:         Bug
Bug description:memory limit and custom error handler produces more errors than 
expected

Description:
------------
When I get to the memory limit of a script, a fatal error raises (expected
behaviour). In order to nicely capture this error, I have created a custom
error handler (through register_shutdown_function) which checks whether the
script ended normally and so I can capture certain fatal errors. (Expected
behaviour)

 

Inside this error handler, I raise the memory limit in order to capture
this particular kind of error so that I can begin to check what happened. 

When I check with empty or isset if a certain variable which shouldn't be
initialized yet exists (or doesn't evaluate to FALSE), the function returns
a rather strange error instead of the default FALSE or TRUE. (Not
expected).

Test script:
---------------
date_default_timezone_set('America/Santiago');

ini_set('memory_limit','1M');



function my_error_handler($errno = '0', $errstr = '[FATAL] General Error',
$errfile = 'N/A', $errline = 'N/A', $errctx = '') {

  global $clean_exit;

  if(empty($clean_exit)) { // if isset or !empty, the script would have
been exited cleanly.

    ini_set('memory_limit','16M'); // This would be just to have enough
memory to print out the error.

    echo '<h5>-- BEGIN ERROR --</h5>Error N&deg;:
<strong>'.$errno.'</strong><br />Error Description:
<strong>'.$errstr.'</strong><br />File: <strong>'.$errfile.'</strong><br
/>Line: <strong>'.$errline.'</strong><br />Memory:
<strong>'.round(memory_get_usage() / 1024).'</strong>KiB /
<strong>'.round(memory_get_peak_usage() / 1024).'</strong>KiB';

    if (isset($errctx['r']['print'])) echo 'THIS LINE GIVES THE ERROR AND
IS NOT PRINTED'; // isset or empty gives the same error

    echo '<h5>-- END ERROR --</h5>';

    die(); // shutdown_function == manual die() or else it will continue to
execute.

  }

}

set_error_handler('my_error_handler');

register_shutdown_function('my_error_handler');



for ($i = 0; $i < 15000; $i++) $a[$i] = mt_rand(1,255);

$r['print'] = (string)$a[1]; // Just to fill something up

echo '<p>Everything fine.</p>';

$clean_exit = TRUE;

Expected result:
----------------
empty or isset returns FALSE, thus dying (normally) one level earlier.

Actual result:
--------------
An E_NOTICE appears: 

Uninitialized string offset: 0 on file X line Y



-- 
Edit bug report at http://bugs.php.net/bug.php?id=52833&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52833&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52833&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52833&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52833&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52833&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52833&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52833&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52833&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52833&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52833&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52833&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52833&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52833&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52833&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52833&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52833&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52833&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52833&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52833&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52833&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52833&r=mysqlcfg

Reply via email to