Index: Zend/zend_vm_def.h =================================================================== RCS file: /repository/ZendEngine2/zend_vm_def.h,v retrieving revision 1.250 diff -u -p -r1.250 zend_vm_def.h --- Zend/zend_vm_def.h 4 Dec 2008 20:12:29 -0000 1.250 +++ Zend/zend_vm_def.h 15 Jan 2009 00:40:06 -0000 @@ -1273,6 +1273,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)) { @@ -1283,6 +1285,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) { @@ -1293,14 +1298,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); @@ -1314,12 +1313,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();