Index: Zend/zend.c =================================================================== RCS file: /repository/ZendEngine2/zend.c,v retrieving revision 1.308.2.12.2.36 diff -u -p -r1.308.2.12.2.36 zend.c --- Zend/zend.c 31 Dec 2007 07:20:02 -0000 1.308.2.12.2.36 +++ Zend/zend.c 19 Jun 2008 10:31:31 -0000 @@ -963,7 +963,8 @@ ZEND_API void zend_error(int type, const /* 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: Zend/zend.h =================================================================== RCS file: /repository/ZendEngine2/zend.h,v retrieving revision 1.293.2.11.2.11 diff -u -p -r1.293.2.11.2.11 zend.h --- Zend/zend.h 15 Feb 2008 07:44:45 -0000 1.293.2.11.2.11 +++ Zend/zend.h 19 Jun 2008 10:31:31 -0000 @@ -663,6 +663,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: Zend/zend_globals.h =================================================================== RCS file: /repository/ZendEngine2/zend_globals.h,v retrieving revision 1.141.2.3.2.8 diff -u -p -r1.141.2.3.2.8 zend_globals.h --- Zend/zend_globals.h 31 Dec 2007 07:20:02 -0000 1.141.2.3.2.8 +++ Zend/zend_globals.h 19 Jun 2008 10:31:31 -0000 @@ -214,11 +214,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;