From: Marcus Boerger Date: Wed, 10 May 2006 21:11:48 +0000 (+0000) Subject: - Enforece rule of disallowing throw in __toString() X-Git-Tag: BEFORE_NEW_OUTPUT_API~242 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82a538c4fae8c2bce3d8dcb45483b1e30c43a60e;p=php - Enforece rule of disallowing throw in __toString() --- diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 2e0c3739fb..e85f4180e9 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1063,10 +1063,12 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty case IS_UNICODE: 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); - zend_error(E_ERROR, "Method %v::__toString() must not throw an exception", ce->name); + if (retval) { + zval_ptr_dtor(&retval); + } + zend_error(E_ERROR, "Method %s::__toString() must not throw an exception", ce->name); return FAILURE; } if (Z_TYPE_P(retval) == (UG(unicode)?IS_UNICODE:IS_STRING)) {