]> granicus.if.org Git - php/commitdiff
User error handlers no longer catch supressed errors (patch by Etienne Kneuss)
authorFelipe Pena <felipe@php.net>
Sat, 8 Mar 2008 21:54:03 +0000 (21:54 +0000)
committerFelipe Pena <felipe@php.net>
Sat, 8 Mar 2008 21:54:03 +0000 (21:54 +0000)
Zend/zend.c
Zend/zend.h
Zend/zend_globals.h

index 95e8ad5f55c6da98fefe1f9cc35da9f46c4d9c2d..b0a8b27255d2dafdd3ddc45697522b6b7d35c740 100644 (file)
@@ -1006,7 +1006,8 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
 
        /* if we don't have a user defined error handler */
        if (!EG(user_error_handler)
-               || !(EG(user_error_handler_error_reporting) & type)) {
+               || !(EG(user_error_handler_error_reporting) & type)
+               || EG(error_handling) != EH_NORMAL) {
                zend_error_cb(type, error_filename, error_lineno, format, args);
        } else switch (type) {
                case E_ERROR:
index 765b8af3b91177badd8345ba78304485018d51bf..e85f40394c153a59d4c2b3484391e1758d7ede2a 100644 (file)
@@ -715,6 +715,12 @@ END_EXTERN_C()
 #include "zend_operators.h"
 #include "zend_variables.h"
 
+typedef enum {
+       EH_NORMAL = 0,
+       EH_SUPPRESS,
+       EH_THROW
+} zend_error_handling_t;
+
 #endif /* ZEND_H */
 
 /*
index 25f248266b32322fb838f6a5018c1f37fc88d0ef..9293715d789622bdaa752d5b061ab24c92edcf09 100644 (file)
@@ -218,11 +218,15 @@ struct _zend_executor_globals {
 
        int user_error_handler_error_reporting;
        zval *user_error_handler;
+       zval *user_error_handler_old;
        zval *user_exception_handler;
        zend_stack user_error_handlers_error_reporting;
        zend_ptr_stack user_error_handlers;
        zend_ptr_stack user_exception_handlers;
 
+       zend_error_handling_t  error_handling;
+       zend_class_entry      *exception_class;
+
        /* timeout support */
        int timeout_seconds;