?? Oct 2005, PHP 5.1 Release Candidate 4
- Fixed bug #34905 (Digest authentication does not work with Apache 1). (Ilia)
- Fixed bug #34902 (mysqli::character_set_name() - undefined method). (Tony)
+- Fixed bug #34893 (PHP5.1 overloading, Cannot access private property).
+ (Dmitry)
- Fixed bug #34899 (Fixed sqlite extension compile failure). (Ilia)
- Fixed bug #34767 (Zend Engine 1 Compatibility not copying objects correctly).
(Dmitry)
--- /dev/null
+--TEST--
+Bug #34893 (PHP5.1 overloading, Cannot access private property)
+--FILE--
+<?php
+class A {
+ private $p;
+ function __get($name){
+ return $this->$name;
+ }
+ function __set($name, $value) {
+ $this->$name = $value;
+ }
+}
+class B {
+ private $t;
+ function __get($name){
+ return $this->$name;
+ }
+ function __set($name, $value) {
+ $this->$name = $value;
+ }
+}
+$a = new A;
+$b = new B;
+$a->p = $b;
+$b->t = "foo";
+
+echo $a->p->t;
+$a->p->t = "bar";
+echo $a->p->t;
+?>
+--EXPECT--
+foobar
zval tmp_member;
zval **retval;
zend_property_info *property_info;
+ zend_bool use_get;
zobj = Z_OBJ_P(object);
+ use_get = (zobj->ce->__get && !zobj->in_get);
if (member->type != IS_STRING) {
tmp_member = *member;
fprintf(stderr, "Ptr object #%d property: %s\n", Z_OBJ_HANDLE_P(object), Z_STRVAL_P(member));
#endif
- property_info = zend_get_property_info(zobj->ce, member, 0 TSRMLS_CC);
+ property_info = zend_get_property_info(zobj->ce, member, use_get TSRMLS_CC);
- if (zend_hash_quick_find(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) {
+ if (!property_info || zend_hash_quick_find(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) {
zval *new_zval;
- if (!zobj->ce->__get && !zobj->ce->__set) {
+ if (!use_get) {
/* we don't have access controls - will just add it */
new_zval = &EG(uninitialized_zval);