summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-08-28 10:27:58 +0000
committerAntony Dovgal <tony2001@php.net>2006-08-28 10:27:58 +0000
commitf7ba7232d894c8658a50937733f226a8493e8e0b (patch)
treedacaaff2129dbe63b091fd7201cc72c32986d98f /Zend
parent615f2d72959316a2b98e31462d5df0384dad142f (diff)
downloadphp-git-f7ba7232d894c8658a50937733f226a8493e8e0b.tar.gz
MFH: fix #38624 (Strange warning when incrementing an object property and exception is thrown from __get method)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/bug38624.phpt34
-rwxr-xr-xZend/zend_interfaces.c4
2 files changed, 37 insertions, 1 deletions
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--
+<?php
+
+class impl
+{
+ public function __construct()
+ {
+ $this->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) {