From fd0d44f0a78bf528cc780b1fd5036e390de19a22 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 8 Mar 2008 21:54:03 +0000 Subject: User error handlers no longer catch supressed errors (patch by Etienne Kneuss) --- Zend/zend.c | 3 ++- Zend/zend.h | 6 ++++++ Zend/zend_globals.h | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) (limited to 'Zend') diff --git a/Zend/zend.c b/Zend/zend.c index 95e8ad5f55..b0a8b27255 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -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: diff --git a/Zend/zend.h b/Zend/zend.h index 765b8af3b9..e85f40394c 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -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 */ /* diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 25f248266b..9293715d78 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -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; -- cgit v1.2.1