--- /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_UNICODE && (UG(unicode) || member->type != IS_STRING)) {
tmp_member = *member;
fprintf(stderr, "Ptr object #%d property: %R\n", Z_OBJ_HANDLE_P(object), Z_TYPE_P(member), 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_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) {
+ if (!property_info || zend_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), 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);