Browse Source

- Fix bug when acccessing $this not in class scope.

experimental/new_apache_hooks
Andi Gutmans 24 years ago
parent
commit
57b853c831
  1. 17
      Zend/zend_compile.c

17
Zend/zend_compile.c

@ -2216,17 +2216,18 @@ void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS
SET_UNUSED(opline_ptr->op2);
opline_ptr->op2.u.EA.type = ZEND_FETCH_FROM_THIS;
if ((opline_ptr->op1.op_type == IS_CONST) && zend_hash_exists(&CG(active_class_entry)->private_properties, opline_ptr->op1.u.constant.value.str.val, opline_ptr->op1.u.constant.value.str.len+1)) {
char *priv_name;
int priv_name_length;
if (CG(active_class_entry)) {
if ((opline_ptr->op1.op_type == IS_CONST) && zend_hash_exists(&CG(active_class_entry)->private_properties, opline_ptr->op1.u.constant.value.str.val, opline_ptr->op1.u.constant.value.str.len+1)) {
char *priv_name;
int priv_name_length;
mangle_private_property_name(&priv_name, &priv_name_length, CG(active_class_entry)->name, CG(active_class_entry)->name_length, opline_ptr->op1.u.constant.value.str.val, opline_ptr->op1.u.constant.value.str.len);
mangle_private_property_name(&priv_name, &priv_name_length, CG(active_class_entry)->name, CG(active_class_entry)->name_length, opline_ptr->op1.u.constant.value.str.val, opline_ptr->op1.u.constant.value.str.len);
STR_FREE(opline_ptr->op1.u.constant.value.str.val);
opline_ptr->op1.u.constant.value.str.val = priv_name;
opline_ptr->op1.u.constant.value.str.len = priv_name_length;
STR_FREE(opline_ptr->op1.u.constant.value.str.val);
opline_ptr->op1.u.constant.value.str.val = priv_name;
opline_ptr->op1.u.constant.value.str.len = priv_name_length;
}
}
*result = opline_ptr->result;
return;
}

Loading…
Cancel
Save