From: Andi Gutmans Date: Mon, 1 Mar 2004 13:29:45 +0000 (+0000) Subject: - Fix crash in exception handling (zend_exception_error(...) and X-Git-Tag: RELEASE_0_2_0~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c72f6ff6161b2fd0421b5de240321e2ca032d13;p=php - Fix crash in exception handling (zend_exception_error(...) and zend_eval_string_ex() were buggy (Dmitry, Andi) --- diff --git a/Zend/zend.c b/Zend/zend.c index 316abaec9f..4fc4fdcb21 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1061,8 +1061,6 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co } } else { zend_exception_error(EG(exception) TSRMLS_CC); - zval_ptr_dtor(&EG(exception)); - EG(exception) = NULL; } efree(params); zval_ptr_dtor(&old_exception); @@ -1072,8 +1070,6 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co } } else { zend_exception_error(EG(exception) TSRMLS_CC); - zval_ptr_dtor(&EG(exception)); - EG(exception) = NULL; } if (retval == NULL && *EG(return_value_ptr_ptr) != NULL) { zval_ptr_dtor(EG(return_value_ptr_ptr)); diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index dd1f2c08bb..6254810a5a 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -508,12 +508,12 @@ static void zend_error_va(int type, const char *file, uint lineno, const char *f va_end(args); } +/* This function doesn't return as it calls E_ERROR */ ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) { zend_class_entry *ce_exception = Z_OBJCE_P(exception); if (instanceof_function(ce_exception, default_exception_ce TSRMLS_CC)) { zval *str, *file, *line; - zval *old_exception = EG(exception); EG(exception) = NULL; @@ -543,8 +543,6 @@ ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) file = zend_read_property(default_exception_ce, exception, "file", sizeof("file")-1, 1 TSRMLS_CC); line = zend_read_property(default_exception_ce, exception, "line", sizeof("line")-1, 1 TSRMLS_CC); - EG(exception) = old_exception; - zend_error_va(E_ERROR, Z_STRVAL_P(file), Z_LVAL_P(line), "Uncaught %s\n thrown", Z_STRVAL_P(str)); } else { zend_error(E_ERROR, "Uncaught exception '%s'", ce_exception->name); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index b9ae38b096..8c4c48c034 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -926,16 +926,10 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC) { int result; - zval *exception = EG(exception); - if (handle_exceptions) { - EG(exception) = NULL; - } result = zend_eval_string(str, retval_ptr, string_name TSRMLS_CC); if (handle_exceptions && EG(exception)) { zend_exception_error(EG(exception) TSRMLS_CC); - zval_ptr_dtor(&EG(exception)); - EG(exception) = exception; result = FAILURE; } return result;