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

index fbeafe1a90dd02239879256655ed086e0b6f5485..f4ef903e7ccd8f485685b5dc95c505a3166ce9d1 100644 (file)
@@ -1513,7 +1513,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 a9318a054db737dda155ce5db17dd4bb067b995e..ea79ea996607d017a09f35776c4251a1d860563f 100644 (file)
@@ -768,6 +768,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;
+
 #define ZEND_U_EQUAL(type, ustr, ulen, str, slen) \
        ((type == IS_STRING)? \
          (!memcmp((ustr).s,(str),(slen))): \
index 559277064bc32e59727117eb30bace4b14cfa4ba..45e6f5296635ce90500d7611adcb64aaa0f3b180 100644 (file)
@@ -212,11 +212,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;