From: Xinchen Hui Date: Tue, 15 Apr 2014 03:05:03 +0000 (+0800) Subject: Fixed zend_object_get_t in simpleXML X-Git-Tag: POST_PHPNG_MERGE~412^2~98 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a0690ff2881a3ed741c81cceec58ce716161e552;p=php Fixed zend_object_get_t in simpleXML --- diff --git a/Zend/zend.c b/Zend/zend.c index b2cc16a5b7..b7946ca61e 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -280,7 +280,8 @@ again: zval_ptr_dtor(&val); } if (!Z_OBJ_HANDLER_P(expr, cast_object) && Z_OBJ_HANDLER_P(expr, get)) { - zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC); + zval rv; + zval *z = Z_OBJ_HANDLER_P(expr, get)(expr, &rv TSRMLS_CC); Z_ADDREF_P(z); if (Z_TYPE_P(z) != IS_OBJECT) { diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 1ce9f11b11..a748ec38d4 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -281,7 +281,8 @@ static int parse_arg_object_to_string(zval *arg, char **p, int *pl, int type TSR } if (!Z_OBJ_HANDLER_P(arg, cast_object) && Z_OBJ_HANDLER_P(arg, get)) { int use_copy; - zval *z = Z_OBJ_HANDLER_P(arg, get)(arg TSRMLS_CC); + zval rv; + zval *z = Z_OBJ_HANDLER_P(arg, get)(arg, &rv TSRMLS_CC); Z_ADDREF_P(z); if(Z_TYPE_P(z) != IS_OBJECT) { zval_dtor(arg); @@ -321,7 +322,8 @@ static int parse_arg_object_to_str(zval *arg, zend_string **str, int type TSRMLS } if (!Z_OBJ_HANDLER_P(arg, cast_object) && Z_OBJ_HANDLER_P(arg, get)) { int use_copy; - zval *z = Z_OBJ_HANDLER_P(arg, get)(arg TSRMLS_CC); + zval rv; + zval *z = Z_OBJ_HANDLER_P(arg, get)(arg, &rv TSRMLS_CC); Z_ADDREF_P(z); if(Z_TYPE_P(z) != IS_OBJECT) { zval_dtor(arg); diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 0cafa71f97..f440f1d48f 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -696,7 +696,8 @@ repeat: case IS_OBJECT: if (Z_TYPE(val_free) == IS_UNDEF) { if (Z_OBJ_HT_P(val)->get) { - val = Z_OBJ_HT_P(val)->get(val TSRMLS_CC); + zval rv; + val = Z_OBJ_HT_P(val)->get(val, &rv TSRMLS_CC); ZVAL_COPY_VALUE(&val_free, val); goto repeat; } else if (Z_OBJ_HT_P(val)->cast_object) { diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 832a96a9c9..35ab8eb572 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -136,8 +136,9 @@ again: break; } } else if (Z_OBJ_HT_P(op)->get) { - zval *tmp = Z_OBJ_HT_P(op)->get(op TSRMLS_CC); - if(Z_TYPE_P(tmp) != IS_OBJECT) { + zval rv; + zval *tmp = Z_OBJ_HT_P(op)->get(op, &rv TSRMLS_CC); + if (Z_TYPE_P(tmp) != IS_OBJECT) { /* for safety - avoid loop */ convert_to_boolean(tmp); result = Z_LVAL_P(tmp); diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index 249effa10e..48e2e49cd8 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -59,7 +59,7 @@ typedef void (*zend_object_set_t)(zval *object, zval *value TSRMLS_DC); /* Used to get object value. Can be used when converting object value to * one of the basic types and when using scalar ops (like ++, +=) on the object */ -typedef zval* (*zend_object_get_t)(zval *object TSRMLS_DC); +typedef zval* (*zend_object_get_t)(zval *object, zval *rv TSRMLS_DC); /* Used to check if a property of the object exists */ /* param has_set_exists: diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index f6c2a9161f..db6502ce66 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -361,7 +361,8 @@ try_again: } \ } else { \ if (Z_OBJ_HT_P(op)->get) { \ - zval *newop = Z_OBJ_HT_P(op)->get(op TSRMLS_CC); \ + zval rv; \ + zval *newop = Z_OBJ_HT_P(op)->get(op, &rv TSRMLS_CC); \ if (Z_TYPE_P(newop) != IS_OBJECT) { \ /* for safety - avoid loop */ \ zval_dtor(op); \ @@ -1628,7 +1629,8 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* { } if (Z_TYPE_P(op1) == IS_OBJECT) { if (Z_OBJ_HT_P(op1)->get) { - op_free = Z_OBJ_HT_P(op1)->get(op1 TSRMLS_CC); + zval rv; + op_free = Z_OBJ_HT_P(op1)->get(op1, &rv TSRMLS_CC); ret = compare_function(result, op_free, op2 TSRMLS_CC); zend_free_obj_get_result(op_free TSRMLS_CC); return ret; @@ -1646,7 +1648,8 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* { } if (Z_TYPE_P(op2) == IS_OBJECT) { if (Z_OBJ_HT_P(op2)->get) { - op_free = Z_OBJ_HT_P(op2)->get(op2 TSRMLS_CC); + zval rv; + op_free = Z_OBJ_HT_P(op2)->get(op2, &rv TSRMLS_CC); ret = compare_function(result, op1, op_free TSRMLS_CC); zend_free_obj_get_result(op_free TSRMLS_CC); return ret; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 410e24c22f..e2beea6398 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -388,12 +388,13 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMP|VAR } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -471,7 +472,8 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMP|VAR if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -523,7 +525,8 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNU if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -744,12 +747,13 @@ ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR| zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((OP2_TYPE == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -841,12 +845,13 @@ ZEND_VM_HELPER_EX(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -912,7 +917,8 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -961,7 +967,8 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -1012,7 +1019,8 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -1059,7 +1067,8 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index c84671c685..e29af43895 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -12080,7 +12080,8 @@ static int ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -12129,7 +12130,8 @@ static int ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -12180,7 +12182,8 @@ static int ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -12227,7 +12230,8 @@ static int ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -13760,12 +13764,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*b } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -13843,7 +13848,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(int (*b if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -13895,7 +13901,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binar if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -14116,12 +14123,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -14213,12 +14221,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_ zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -16184,12 +16193,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*bin } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -16267,7 +16277,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMP(int (*bin if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -16319,7 +16330,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_ if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -16540,12 +16552,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t i zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -16637,12 +16650,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -18217,12 +18231,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*bin } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -18300,7 +18315,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_VAR(int (*bin if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -18352,7 +18368,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_ if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -18573,12 +18590,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t i zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -18670,12 +18688,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -20337,12 +20356,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (* } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -20420,7 +20440,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(int (* if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -20472,7 +20493,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -21785,12 +21807,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*bina } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -21868,7 +21891,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -21920,7 +21944,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_o if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -22141,12 +22166,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t in zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -22238,12 +22264,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t i zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -23682,12 +23709,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(int } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -23764,7 +23792,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(int if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -23816,7 +23845,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*bi if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -24037,12 +24067,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(incde zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -24134,12 +24165,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(incd zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -25113,12 +25145,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (* } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -25195,7 +25228,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMP(int (* if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -25247,7 +25281,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -25468,12 +25503,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_ zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -25565,12 +25601,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -26455,12 +26492,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (* } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -26537,7 +26575,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_VAR(int (* if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -26589,7 +26628,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -26810,12 +26850,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_ zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -26907,12 +26948,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -27798,12 +27840,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -27880,7 +27923,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(int if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -27932,7 +27976,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*b if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -28310,12 +28355,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*b } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -28392,7 +28438,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(int (*b if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -28444,7 +28491,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binar if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -28665,12 +28713,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(incdec_t zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -28762,12 +28811,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(incdec_ zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -29646,7 +29696,8 @@ static int ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -29694,7 +29745,8 @@ static int ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -29744,7 +29796,8 @@ static int ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_increment_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -29790,7 +29843,8 @@ static int ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS && Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set)) { /* proxy object */ - zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *val = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(val); fast_decrement_function(val); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, val TSRMLS_CC); @@ -31152,12 +31206,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(int (*bi } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -31234,7 +31289,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(int (*bi if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -31286,7 +31342,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -31507,12 +31564,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(incdec_t zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -31604,12 +31662,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(incdec_t zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -33359,12 +33418,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*bina } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -33441,7 +33501,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMP(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -33493,7 +33554,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_o if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -33714,12 +33776,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t in zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -33811,12 +33874,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t i zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -35271,12 +35335,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*bina } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -35353,7 +35418,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_VAR(int (*bina if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -35405,7 +35471,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_o if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -35626,12 +35693,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t in zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -35723,12 +35791,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t i zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); @@ -37269,12 +37338,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*b } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -37351,7 +37421,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(int (*b if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -37403,7 +37474,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binar if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -38582,12 +38654,13 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(int (*binar } if (z) { if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } //??? if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -38664,7 +38737,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(int (*binar if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -38716,7 +38790,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) && UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) { /* proxy object */ - zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr TSRMLS_CC); + zval rv; + zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC); Z_ADDREF_P(objval); binary_op(objval, objval, value TSRMLS_CC); Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC); @@ -38937,12 +39012,13 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(incdec_t inc zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), &rv TSRMLS_CC); if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } if (Z_REFCOUNTED_P(z)) Z_ADDREF_P(z); SEPARATE_ZVAL_IF_NOT_REF(z); @@ -39034,12 +39110,13 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(incdec_t in zval z_copy; if (UNEXPECTED(Z_TYPE_P(z) == IS_OBJECT) && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); + zval rv; + zval *value = Z_OBJ_HT_P(z)->get(z, &rv TSRMLS_CC); if (Z_REFCOUNT_P(z) == 0) { zval_dtor(z); } - z = value; + ZVAL_COPY_VALUE(z, value); } ZVAL_DUP(retval, z); ZVAL_DUP(&z_copy, z); diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 76fab5ac35..16e4c8539e 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -54,7 +54,7 @@ PHP_SXE_API zend_class_entry *sxe_get_element_class_entry() /* {{{ */ static php_sxe_object* php_sxe_object_new(zend_class_entry *ce TSRMLS_DC); static xmlNodePtr php_sxe_reset_iterator(php_sxe_object *sxe, int use_data TSRMLS_DC); static xmlNodePtr php_sxe_iterator_fetch(php_sxe_object *sxe, xmlNodePtr node, int use_data TSRMLS_DC); -static zval *sxe_get_value(zval *z TSRMLS_DC); +static zval *sxe_get_value(zval *z, zval *rv TSRMLS_DC); static void php_sxe_iterator_dtor(zend_object_iterator *iter TSRMLS_DC); static int php_sxe_iterator_valid(zend_object_iterator *iter TSRMLS_DC); static zval *php_sxe_iterator_current_data(zend_object_iterator *iter TSRMLS_DC); @@ -528,19 +528,14 @@ static int sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_bool case IS_BOOL: case IS_DOUBLE: case IS_NULL: - if (Z_REFCOUNT_P(value) > 1) { - value_copy = *value; - zval_copy_ctor(&value_copy); - value = &value_copy; - } convert_to_string(value); break; case IS_STRING: break; case IS_OBJECT: if (Z_OBJCE_P(value) == sxe_class_entry) { - value = sxe_get_value(value TSRMLS_CC); //??? + value = sxe_get_value(value, value TSRMLS_CC); //INIT_PZVAL(value); new_value = 1; break; @@ -1913,23 +1908,14 @@ SXE_METHOD(count) } /* }}} */ -static zval *sxe_get_value(zval *z TSRMLS_DC) /* {{{ */ +static zval *sxe_get_value(zval *z, zval *rv TSRMLS_DC) /* {{{ */ { -#if 0 - ????? - zval *retval; - - MAKE_STD_ZVAL(retval); - - if (sxe_object_cast(z, retval, IS_STRING TSRMLS_CC) == FAILURE) { + if (sxe_object_cast(z, rv, IS_STRING TSRMLS_CC) == FAILURE) { zend_error(E_ERROR, "Unable to cast node to string"); /* FIXME: Should not be fatal */ } - Z_SET_REFCOUNT_P(retval, 0); - return retval; -#endif - return NULL; + return rv; } /* }}} */