From: Antony Dovgal Date: Mon, 28 Aug 2006 10:27:58 +0000 (+0000) Subject: MFH: fix #38624 (Strange warning when incrementing an object property and exception... X-Git-Tag: php-5.2.0RC3~50 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7ba7232d894c8658a50937733f226a8493e8e0b;p=php MFH: fix #38624 (Strange warning when incrementing an object property and exception is thrown from __get method) --- diff --git a/NEWS b/NEWS index 89f467dbfa..58d706b281 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS SoapServer::setClass() method). (Dmitry) - Added support for hexadecimal entity in imagettftext() for the bundled GD. (Pierre) +- Fixed bug #38624 (Strange warning when incrementing an object property and + exception is thrown from __get method). (Tony) - Fixed bug #38543 (shutdown_executor() may segfault when memory_limit is too low). (Dmitry) - Fixed bug #38535 (memory corruption in pdo_pgsql driver on error retrieval diff --git a/Zend/tests/bug38624.phpt b/Zend/tests/bug38624.phpt new file mode 100644 index 0000000000..081e35c72a --- /dev/null +++ b/Zend/tests/bug38624.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #38624 (Strange warning when incrementing an object property and exception is thrown from __get method) +--FILE-- +counter++; + } + public function __set( $name, $value ) + { + throw new Exception( "doesn't work" ); + } + + public function __get( $name ) + { + throw new Exception( "doesn't work" ); + } + +} + +$impl = new impl(); + +echo "Done\n"; +?> +--EXPECTF-- +Fatal error: Uncaught exception 'Exception' with message 'doesn't work' in %s:%d +Stack trace: +#0 %s(%d): impl->__get('counter') +#1 %s(%d): impl->__construct() +#2 {main} + thrown in %s on line %d diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index a6a937c90c..c5badb1a6c 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -92,7 +92,9 @@ ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend if (!obj_ce) { obj_ce = object_pp ? Z_OBJCE_PP(object_pp) : NULL; } - zend_error(E_CORE_ERROR, "Couldn't execute method %s%s%s", obj_ce ? obj_ce->name : "", obj_ce ? "::" : "", function_name); + if (!EG(exception)) { + zend_error(E_CORE_ERROR, "Couldn't execute method %s%s%s", obj_ce ? obj_ce->name : "", obj_ce ? "::" : "", function_name); + } } if (!retval_ptr_ptr) { if (retval) {