Bug #51463 [ReO->Csd]: ErrorException thrown from error_handler not catchable in exception handler

From: Date: Fri, 18 Feb 2011 10:54:35 +0000
Subject: Bug #51463 [ReO->Csd]: ErrorException thrown from error_handler not catchable in exception handler
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-158856@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=51463&edit=1

 ID:                 51463
 User updated by:    tyra3l at gmail dot com
 Reported by:        tyra3l at gmail dot com
 Summary:            ErrorException thrown from error_handler not
                     catchable in exception handler
-Status:             Re-Opened
+Status:             Closed
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Windows Xp Sp3, Debian Lenny
 PHP Version:        5.3.2
 Block user comment: N
 Private report:     N

 New Comment:

I will try to reproduce the problem with a more clean test script, and
create a new issue for that.

Tyrael


Previous Comments:
------------------------------------------------------------------------
[2010-05-05 21:24:40] tyra3l at gmail dot com

obviously.
closures was added with php 5.3
http://php.net/manual/en/functions.anonymous.php

Tyrael

------------------------------------------------------------------------
[2010-05-05 20:15:14] whatrevolution at yahoo dot com

OP's test code, result:

( ! ) Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in
/var/www/php_bugs/exception_in_error_handler.php on line 13

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)

------------------------------------------------------------------------
[2010-04-02 15:19:15] tyra3l at gmail dot com

Another weird thing that I observed:
If I try to handle the fatal error from register shutdown function then
the error_get_last() will return NULL if I throw the ErrorException from
the error handler.
If I don't try to convert exceptions from errors, then the
error_get_last() will return the fatal error in the shutdown function.

Or if I generate fatal error for example with 
new NonExistentClassName;
then the error_handler doesn't get called (because this is a fatal
error), but the shutdown function gets the fatal error with
error_get_last()

So it seems that there is some strange magic with this situation.

Tyrael

------------------------------------------------------------------------
[2010-04-02 13:41:02] tyra3l at gmail dot com

But the exception handler should be called after the error handler and
before accessing the empty property which gives the fatal error, isn't
it?

I mean at first the interpreter tries to access the variable named $foo,
then generates a E_NOTICE which is trapped by the error handler, which
trows an Exception which never catched at all.

------------------------------------------------------------------------
[2010-04-02 13:35:54] tyra3l at gmail dot com

shit, my mistake, $foo will be empty, so $this->$foo will be generating
a fatal error, but before that, generate a warning about $foo is empty.
:/

------------------------------------------------------------------------


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

    http://bugs.php.net/bug.php?id=51463


-- 
Edit this bug report at http://bugs.php.net/bug.php?id=51463&edit=1


Thread (9 messages)

« previous php.bugs (#158856) next »