From c021824fc1b9aa8b0a6b865c5fbab82b8ffff6a2 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 7 Aug 2006 15:15:36 +0000 Subject: [PATCH] Fixed bug #38287 (static variables mess up global vars) --- Zend/tests/bug38287.phpt | 45 ++++++++++ Zend/zend.h | 5 ++ Zend/zend_objects_API.c | 7 ++ Zend/zend_objects_API.h | 1 + Zend/zend_vm_def.h | 8 ++ Zend/zend_vm_execute.h | 183 ++++++++++++++++++++++++++++----------- 6 files changed, 198 insertions(+), 51 deletions(-) create mode 100755 Zend/tests/bug38287.phpt diff --git a/Zend/tests/bug38287.phpt b/Zend/tests/bug38287.phpt new file mode 100755 index 0000000000..9a53a9335f --- /dev/null +++ b/Zend/tests/bug38287.phpt @@ -0,0 +1,45 @@ +--TEST-- +Bug #38287 (static variables mess up global vars) +--FILE-- +vars[]=1; + self::get_object()->vars[]=2; + self::get_object()->vars[]=3; + var_dump(self::get_object()->vars); + } +} +?> +--EXPECT-- +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} +NULL diff --git a/Zend/zend.h b/Zend/zend.h index bf5a37d88d..d89933c411 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -687,6 +687,11 @@ END_EXTERN_C() varptr->refcount++; \ } +#define READY_TO_DESTROY(zv) \ + ((zv)->refcount == 1 && \ + (Z_TYPE_P(zv) != IS_OBJECT || \ + zend_objects_store_get_refcount(zv TSRMLS_CC) == 1)) + #define ZEND_MAX_RESERVED_RESOURCES 4 diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c index 08b50a9260..beb07cbf1a 100644 --- a/Zend/zend_objects_API.c +++ b/Zend/zend_objects_API.c @@ -125,6 +125,13 @@ ZEND_API zend_object_handle zend_objects_store_put(void *object, zend_objects_st return handle; } +ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC) +{ + zend_object_handle handle = Z_OBJ_HANDLE_P(object); + + return EG(objects_store).object_buckets[handle].bucket.obj.refcount; +} + ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC) { zend_object_handle handle = Z_OBJ_HANDLE_P(object); diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h index 78340e3bc1..fa33ffb50d 100644 --- a/Zend/zend_objects_API.h +++ b/Zend/zend_objects_API.h @@ -66,6 +66,7 @@ ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC); ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC); ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC); ZEND_API void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC); +ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC); ZEND_API int zend_objects_is_destructor_called(zend_object_handle handle TSRMLS_DC); ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC); ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 0cd7977046..96757e533d 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1073,6 +1073,7 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMP|VAR|UNUSED|CV) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_W), dim, IS_OP2_TMP_FREE(), BP_VAR_W TSRMLS_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1089,6 +1090,7 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMP|VAR|UNUSED|CV) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW), dim, IS_OP2_TMP_FREE(), BP_VAR_RW TSRMLS_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1122,6 +1124,7 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, VAR|CV, CONST|TMP|VAR|UNUSED|CV) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(type), dim, IS_OP2_TMP_FREE(), type TSRMLS_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR && type == BP_VAR_W && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1149,6 +1152,7 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMP|VAR|CV) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, IS_OP2_TMP_FREE(), BP_VAR_UNSET TSRMLS_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1254,6 +1258,7 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); } if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1277,6 +1282,7 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); } if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1308,6 +1314,7 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); } if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -1340,6 +1347,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); } if (OP1_TYPE == IS_VAR && OP1_FREE && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 3bd93c0928..133ba00af7 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -8961,6 +8961,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -8977,6 +8978,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9010,6 +9012,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9037,6 +9040,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9142,6 +9146,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9165,6 +9170,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9196,6 +9202,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -9228,6 +9235,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10487,6 +10495,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC); zval_dtor(free_op2.var); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10503,6 +10512,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); zval_dtor(free_op2.var); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10536,6 +10546,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, type TSRMLS_CC); zval_dtor(free_op2.var); if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10563,6 +10574,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC); zval_dtor(free_op2.var); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10668,6 +10680,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10691,6 +10704,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10722,6 +10736,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS zval_dtor(free_op2.var); } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -10754,6 +10769,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12016,6 +12032,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12032,6 +12049,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12065,6 +12083,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12092,6 +12111,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12197,6 +12217,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12220,6 +12241,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12251,6 +12273,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -12283,6 +12306,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -13150,6 +13174,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -13166,6 +13191,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -13187,6 +13213,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_A zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14012,6 +14039,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14028,6 +14056,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14061,6 +14090,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14088,6 +14118,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14193,6 +14224,8 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -14247,6 +14280,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_VAR == IS_VAR && (free_op1.var != NULL) && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -15462,7 +15496,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { @@ -15480,6 +15514,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -15490,7 +15525,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (0) { @@ -15521,7 +15556,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (0) { @@ -15534,6 +15569,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -15547,7 +15583,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_res; + zend_free_op free_op1, free_res; zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); zval *property = &opline->op2.u.constant; @@ -16627,7 +16663,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { @@ -16645,6 +16681,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -16655,7 +16692,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (1) { @@ -16686,7 +16723,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (1) { @@ -16699,6 +16736,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A zval_dtor(free_op2.var); } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -16712,7 +16750,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2, free_res; + zend_free_op free_op1, free_op2, free_res; zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -17751,7 +17789,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { @@ -17769,6 +17807,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -17779,7 +17818,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (0) { @@ -17792,6 +17831,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -17810,7 +17850,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (0) { @@ -17823,6 +17863,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -17836,7 +17877,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2, free_res; + zend_free_op free_op1, free_op2, free_res; zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -17855,6 +17896,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -19250,7 +19292,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { @@ -19268,6 +19310,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -19278,7 +19321,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (0) { @@ -19291,6 +19334,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -19309,7 +19353,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (0) { @@ -19322,6 +19366,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -19335,7 +19380,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_res; + zend_free_op free_op1, free_res; zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -19354,6 +19399,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_UNUSED == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -21821,12 +21867,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = &opline->op2.u.constant; zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -21837,12 +21884,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = &opline->op2.u.constant; zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -21865,7 +21913,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; zval *dim; @@ -21876,6 +21924,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -21886,7 +21935,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); zval *dim = &opline->op2.u.constant; @@ -21903,6 +21952,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -21989,7 +22039,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { @@ -22007,6 +22057,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -22017,7 +22068,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (0) { @@ -22030,6 +22081,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -22048,7 +22100,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - + zend_free_op free_op1; zval *property = &opline->op2.u.constant; if (0) { @@ -22061,6 +22113,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -22074,7 +22127,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_res; + zend_free_op free_op1, free_res; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); zval *property = &opline->op2.u.constant; @@ -22093,6 +22146,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23339,12 +23393,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC); zval_dtor(free_op2.var); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23355,12 +23410,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); zval_dtor(free_op2.var); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23383,7 +23439,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; zval *dim; @@ -23394,6 +23450,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 1, type TSRMLS_CC); zval_dtor(free_op2.var); if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23404,7 +23461,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -23421,6 +23478,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC); zval_dtor(free_op2.var); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23507,7 +23565,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { @@ -23525,6 +23583,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23535,7 +23594,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (1) { @@ -23548,6 +23607,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23566,7 +23626,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (1) { @@ -23579,6 +23639,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -23592,7 +23653,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2, free_res; + zend_free_op free_op1, free_op2, free_res; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -23611,6 +23672,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zval_dtor(free_op2.var); } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -24860,12 +24922,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -24876,12 +24939,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -24904,7 +24968,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; zval *dim; @@ -24915,6 +24979,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -24925,7 +24990,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -24942,6 +25007,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -25028,7 +25094,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { @@ -25046,6 +25112,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -25056,7 +25123,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (0) { @@ -25069,6 +25136,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -25087,7 +25155,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - zend_free_op free_op2; + zend_free_op free_op1, free_op2; zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); if (0) { @@ -25100,6 +25168,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -25113,7 +25182,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_op2, free_res; + zend_free_op free_op1, free_op2, free_res; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -25132,6 +25201,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -25985,12 +26055,13 @@ static int ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = NULL; zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26001,12 +26072,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = NULL; zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26017,7 +26089,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; zval *dim; @@ -26028,6 +26100,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26846,12 +26919,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26862,12 +26936,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26890,7 +26965,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; zval *dim; @@ -26901,6 +26976,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -26911,7 +26987,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -26928,6 +27004,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -27014,7 +27091,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { @@ -27032,6 +27109,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -27042,7 +27120,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (0) { @@ -27055,6 +27133,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -27073,7 +27152,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { /* Behave like FETCH_OBJ_W */ - + zend_free_op free_op1; zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); if (0) { @@ -27086,6 +27165,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } @@ -27099,7 +27179,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_op *opline = EX(opline); - zend_free_op free_res; + zend_free_op free_op1, free_res; zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -27118,6 +27198,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) } if (IS_CV == IS_VAR && 0 && + READY_TO_DESTROY(free_op1.var) && !RETURN_VALUE_UNUSED(&opline->result)) { AI_USE_PTR(EX_T(opline->result.u.var).var); } -- 2.50.1