cvs: ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests bug32660.phpt bug37667.phpt
| From: | Dmitry Stogov | Date: | Fri, 21 Jul 2006 10:32:17 +0000 |
| Subject: | cvs: ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests bug32660.phpt bug37667.phpt | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-5109@lists.php.net to get a copy of this message | ||
dmitry Fri Jul 21 10:32:17 2006 UTC
Modified files: (Branch: PHP_5_2)
/ZendEngine2 zend_object_handlers.c
/ZendEngine2/tests bug32660.phpt bug37667.phpt
Log:
Changed error message (E_ERROR -> E_NOTICE) in case of indirect modification of overloaded
property.
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.135.2.6.2.8&r2=1.135.2.6.2.9&diff_format=u
Index: ZendEngine2/zend_object_handlers.c
diff -u ZendEngine2/zend_object_handlers.c:1.135.2.6.2.8
ZendEngine2/zend_object_handlers.c:1.135.2.6.2.9
--- ZendEngine2/zend_object_handlers.c:1.135.2.6.2.8 Mon Jul 10 00:36:28 2006
+++ ZendEngine2/zend_object_handlers.c Fri Jul 21 10:32:17 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_object_handlers.c,v 1.135.2.6.2.8 2006/07/10 00:36:28 helly Exp $ */
+/* $Id: zend_object_handlers.c,v 1.135.2.6.2.9 2006/07/21 10:32:17 dmitry Exp $ */
#include "zend.h"
#include "zend_globals.h"
@@ -334,6 +334,18 @@
if (rv) {
retval = &rv;
+ if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && rv->refcount
> 0) {
+ zval *tmp = rv;
+
+ ALLOC_ZVAL(rv);
+ *rv = *tmp;
+ zval_copy_ctor(rv);
+ rv->is_ref = 0;
+ rv->refcount = 0;
+ if (Z_TYPE_P(rv) != IS_OBJECT) {
+ zend_error(E_NOTICE, "Indirect modification of overloaded property %s::$%s has no
effect", zobj->ce->name, Z_STRVAL_P(member));
+ }
+ }
} else {
retval = &EG(uninitialized_zval_ptr);
}
@@ -349,9 +361,9 @@
zval_ptr_dtor(&tmp_member);
(*retval)->refcount--;
}
- if (*retval && (type == BP_VAR_W || type == BP_VAR_RW) && Z_TYPE_PP(retval) ==
IS_ARRAY) {
- zend_error(E_ERROR, "Cannot use array returned from %s::__get('%s') in write
context", zobj->ce->name, Z_STRVAL_P(member));
- }
+// if (*retval && (type == BP_VAR_W || type == BP_VAR_RW) && Z_TYPE_PP(retval) ==
IS_ARRAY) {
+// zend_error(E_ERROR, "Cannot use array returned from %s::__get('%s') in write
context", zobj->ce->name, Z_STRVAL_P(member));
+// }
return *retval;
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug32660.phpt?r1=1.1&r2=1.1.6.1&diff_format=u
Index: ZendEngine2/tests/bug32660.phpt
diff -u ZendEngine2/tests/bug32660.phpt:1.1 ZendEngine2/tests/bug32660.phpt:1.1.6.1
--- ZendEngine2/tests/bug32660.phpt:1.1 Thu Jun 23 11:04:35 2005
+++ ZendEngine2/tests/bug32660.phpt Fri Jul 21 10:32:17 2006
@@ -28,9 +28,12 @@
print_r($a);
?>
--EXPECTF--
+Notice: Indirect modification of overloaded property A::$whatever has no effect in %sbug32660.php
on line 20
A Object
(
- [q] => long
+ [q] => 3
)
+Notice: Indirect modification of overloaded property A::$whatever has no effect in %sbug32660.php
on line 23
+
Fatal error: Cannot assign by reference to overloaded object in %sbug32660.php on line 23
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug37667.phpt?r1=1.2.2.2&r2=1.2.2.3&diff_format=u
Index: ZendEngine2/tests/bug37667.phpt
diff -u ZendEngine2/tests/bug37667.phpt:1.2.2.2 ZendEngine2/tests/bug37667.phpt:1.2.2.3
--- ZendEngine2/tests/bug37667.phpt:1.2.2.2 Mon Jul 10 00:36:28 2006
+++ ZendEngine2/tests/bug37667.phpt Fri Jul 21 10:32:17 2006
@@ -30,7 +30,7 @@
--EXPECTF--
string(3) "bar"
-Notice: Undefined offset: 2 in %sbug37667.php on line %d
+Notice: Undefined offset: 2 in %sbug37667.php on line 16
NULL
object(Test)#%d (1) {
["property:protected"]=>
@@ -40,4 +40,14 @@
}
}
-Fatal error: Cannot use array returned from Test::__get('property') in write context in
%sbug37667.php on line %d
+Notice: Indirect modification of overloaded property Test::$property has no effect in
%sbug37667.php on line 20
+
+Notice: Indirect modification of overloaded property Test::$property has no effect in
%sbug37667.php on line 21
+object(Test)#%d (1) {
+ ["property:protected"]=>
+ array(1) {
+ ["foo"]=>
+ string(3) "bar"
+ }
+}
+===DONE===