Index: Zend/zend_vm_def.h =================================================================== RCS file: /repository/ZendEngine2/zend_vm_def.h,v retrieving revision 1.59.2.29.2.48.2.81 diff -u -p -r1.59.2.29.2.48.2.81 zend_vm_def.h --- Zend/zend_vm_def.h 10 Jan 2009 19:15:39 -0000 1.59.2.29.2.48.2.81 +++ Zend/zend_vm_def.h 15 Jan 2009 00:37:09 -0000 @@ -1236,6 +1236,8 @@ ZEND_VM_HELPER_EX(zend_fetch_property_ad zend_op *opline = EX(opline); zend_free_op free_op1; zval *container = GET_OP1_OBJ_ZVAL_PTR(type); + zend_free_op free_op2; + zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); if (container == EG(error_zval_ptr)) { if (!RETURN_VALUE_UNUSED(&opline->result)) { @@ -1246,6 +1248,9 @@ ZEND_VM_HELPER_EX(zend_fetch_property_ad ZEND_VM_NEXT_OPCODE(); } + if (IS_OP2_TMP_FREE()) { + MAKE_REAL_ZVAL_PTR(offset); + } if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { if (type != BP_VAR_IS) { @@ -1256,14 +1261,8 @@ ZEND_VM_HELPER_EX(zend_fetch_property_ad PZVAL_LOCK(EG(uninitialized_zval_ptr)); } } else { - zend_free_op free_op2; - zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); zval *retval; - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(offset); - } - /* here we are sure we are dealing with an object */ retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); @@ -1277,12 +1276,12 @@ ZEND_VM_HELPER_EX(zend_fetch_property_ad AI_SET_PTR(EX_T(opline->result.u.var).var, retval); PZVAL_LOCK(retval); } + } - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&offset); - } else { - FREE_OP2(); - } + if (IS_OP2_TMP_FREE()) { + zval_ptr_dtor(&offset); + } else { + FREE_OP2(); } FREE_OP1();