Bug #51363 [Csd]: Fatal error raised by var_export() not caught by error handler
Edit report at https://bugs.php.net/bug.php?id=51363&edit=1
ID: 51363
Updated by: stas@php.net
Reported by: daan at react dot com
Summary: Fatal error raised by var_export() not caught by
error handler
Status: Closed
Type: Bug
Package: Scripting Engine problem
Operating System: Debian Etch
PHP Version: 5.2.13
Assigned To: derick
Block user comment: N
Private report: N
New Comment:
Unfortunately, no good way to var_export recursive structures yet. You can use
serialize() for that.
Previous Comments:
------------------------------------------------------------------------
[2012-08-06 04:00:50] stas@php.net
fixed in 5.4 & trunk - var_export no longer produces fatal error but produces
warning instead on recursion.
------------------------------------------------------------------------
[2012-08-06 04:00:06] stas@php.net
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
For Windows:
http://windows.php.net/snapshots/
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2010-11-05 03:32:42] yohgaki at ohgaki dot net
I was biten by this bug recently.
Not like php_var_dump() and php_debug_zval_dump(), php_var_export_ex() does not
have protection against recursive arrays.
Therefore, zend_error() is raised in Zend Engine with E_ERROR.
(HASH_PROTECT_RECURSION macro in zend_hash.c to be exact) This makes impossible
to catch exception or error by user error handler.
Possible solutions:
Add recursion protection just like php_var_dump()/php_debug_zval_dump() and
raize E_NOTICE error for recursive dependency.
Since php_var_export() allows only one zval, export recursive dependency
correctly by using '&'.
This bug is applicable to 5.2/5.3/trunk.
------------------------------------------------------------------------
[2010-07-02 11:12:20] daan at react dot com
No I do not expect it to go on infinitely - the bug is that the php error caused by var_export() in
this case is not caught by the error handler, when it should be.
------------------------------------------------------------------------
[2010-04-22 22:37:22] whatrevolution at yahoo dot com
I am curious if the bug OP expects the var_export() output to never end... ever? I do, because it
is a recursive reference, so I'm puzzled that this is considered a bug.
However, perhaps the solution would be to not throw a fatal error, but throw a notice or warning
and/or provide some way of telling var_export() how deep to print.
array ( 0 => array ( 0 => array ( 0 => array ( 0 => array (
( ! ) Fatal error: Nesting level too deep - recursive dependency? in
/var/www/php_bugs/var_export_recursion_test.php on line 36
Call Stack
# Time Memory Function Location
1 0.0004 108776 {main}( ) ../var_export_recursion_test.php:0
2 0.0004 109968 var_export ( ) ../var_export_recursion_test.php:36
PHP Version 5.2.10-2ubuntu6.4
System Linux 2.6.31-20-generic x86_64
Build Date Jan 6 2010 22:36:47
Server API Apache 2.0 Handler
PHP API 20041225
PHP Extension 20060613
Zend Extension 220060519
Debug Build no
Thread Safety disabled
Zend Memory Manager enabled
Apache/2.2.12 (Ubuntu)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=51363
--
Edit this bug report at https://bugs.php.net/bug.php?id=51363&edit=1
Thread (8 messages)