summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_object_handlers.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 1f57ecf851..5e2894a198 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -1034,9 +1034,11 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty
case IS_STRING:
ce = Z_OBJCE_P(readobj);
if (ce->__tostring &&
- zend_call_method_with_0_params(&readobj, ce, &ce->__tostring, "__tostring", &retval)) {
+ (zend_call_method_with_0_params(&readobj, ce, &ce->__tostring, "__tostring", &retval) || EG(exception))) {
if (EG(exception)) {
- zval_ptr_dtor(&retval);
+ if (retval) {
+ zval_ptr_dtor(&retval);
+ }
zend_error(E_ERROR, "Method %s::__toString() must not throw an exception", ce->name);
return FAILURE;
}