diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-20 10:35:50 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-20 10:35:50 +0100 |
commit | 0d8ebbaa7383534f5272930052ae86dedce290d5 (patch) | |
tree | 2e7d9b2b98c9c5158140ac2cead06b9a029d0539 /Zend | |
parent | 2ab123b84e438458e1070e99cfdcdcd7174fabea (diff) | |
parent | 885b3451f4e9616e3d7d8e31cc2270f1b07ab139 (diff) | |
download | php-git-0d8ebbaa7383534f5272930052ae86dedce290d5.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fix early free of assign_obj op_data
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/tests/overloaded_assign_prop_return_value.phpt | 14 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 10 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 360 |
3 files changed, 310 insertions, 74 deletions
diff --git a/Zend/tests/overloaded_assign_prop_return_value.phpt b/Zend/tests/overloaded_assign_prop_return_value.phpt new file mode 100644 index 0000000000..954505f1e9 --- /dev/null +++ b/Zend/tests/overloaded_assign_prop_return_value.phpt @@ -0,0 +1,14 @@ +--TEST-- +Make sure the return value of a property assignment is not freed to early +--FILE-- +<?php +class Overloaded { + function __set($r, $a) {} +} +$obj = new Overloaded; +$x = $obj->prop = new stdClass; +var_dump($x); +?> +--EXPECT-- +object(stdClass)#2 (0) { +} diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 015a766616..a42371cc26 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2377,6 +2377,9 @@ ZEND_VM_C_LABEL(assign_object): } else { ZEND_VM_C_LABEL(fast_assign_obj): value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } ZEND_VM_C_GOTO(exit_assign_obj); } } @@ -2424,6 +2427,9 @@ ZEND_VM_C_LABEL(fast_assign_obj): } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } ZEND_VM_C_GOTO(exit_assign_obj); } } @@ -2451,11 +2457,11 @@ ZEND_VM_C_LABEL(fast_assign_obj): } ZEND_VM_C_LABEL(free_and_exit_assign_obj): - FREE_OP_DATA(); -ZEND_VM_C_LABEL(exit_assign_obj): if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + FREE_OP_DATA(); +ZEND_VM_C_LABEL(exit_assign_obj): FREE_OP2(); FREE_OP1_VAR_PTR(); /* assign_obj has two opcodes! */ diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7845119245..ed67ae5e5f 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -21471,6 +21471,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21518,6 +21521,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21545,12 +21551,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -21610,6 +21616,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21657,6 +21666,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21684,11 +21696,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -21749,6 +21761,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21796,6 +21811,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21823,11 +21841,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -21888,6 +21906,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21935,6 +21956,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -21962,12 +21986,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -23716,6 +23740,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -23763,6 +23790,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -23790,11 +23820,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -23855,6 +23885,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -23902,6 +23935,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -23929,11 +23965,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -23994,6 +24030,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -24041,6 +24080,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -24068,11 +24110,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -24133,6 +24175,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -24180,6 +24225,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -24207,11 +24255,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -27143,6 +27191,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27190,6 +27241,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27217,12 +27271,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -27282,6 +27336,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27329,6 +27386,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27356,11 +27416,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -27421,6 +27481,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27468,6 +27531,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27495,11 +27561,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ @@ -27560,6 +27626,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27607,6 +27676,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -27634,12 +27706,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -29598,6 +29670,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29645,6 +29720,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29672,12 +29750,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -29737,6 +29815,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29784,6 +29865,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29811,11 +29895,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -29876,6 +29960,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29923,6 +30010,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -29950,11 +30040,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -30015,6 +30105,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -30062,6 +30155,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -30089,12 +30185,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -31440,6 +31536,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31487,6 +31586,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31514,11 +31616,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -31579,6 +31681,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31626,6 +31731,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31653,11 +31761,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -31718,6 +31826,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31765,6 +31876,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31792,11 +31906,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -31857,6 +31971,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31904,6 +32021,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -31931,11 +32051,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -33811,6 +33931,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -33858,6 +33981,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -33885,12 +34011,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -33950,6 +34076,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -33997,6 +34126,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -34024,11 +34156,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -34089,6 +34221,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -34136,6 +34271,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -34163,11 +34301,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -34228,6 +34366,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -34275,6 +34416,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -34302,12 +34446,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -38060,6 +38204,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38107,6 +38254,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38134,12 +38284,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -38199,6 +38349,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38246,6 +38399,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38273,11 +38429,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -38338,6 +38494,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38385,6 +38544,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38412,11 +38574,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -38477,6 +38639,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38524,6 +38689,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -38551,12 +38719,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -41485,6 +41653,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41532,6 +41703,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41559,11 +41733,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -41624,6 +41798,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41671,6 +41848,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41698,11 +41878,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -41763,6 +41943,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41810,6 +41993,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41837,11 +42023,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -41902,6 +42088,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41949,6 +42138,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -41976,11 +42168,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + +exit_assign_obj: zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); /* assign_obj has two opcodes! */ @@ -46269,6 +46461,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46316,6 +46511,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46343,12 +46541,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); @@ -46408,6 +46606,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46455,6 +46656,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46482,11 +46686,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -46547,6 +46751,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46594,6 +46801,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46621,11 +46831,11 @@ fast_assign_obj: } free_and_exit_assign_obj: - zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); +exit_assign_obj: /* assign_obj has two opcodes! */ @@ -46686,6 +46896,9 @@ assign_object: } else { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46733,6 +46946,9 @@ fast_assign_obj: } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } goto exit_assign_obj; } } @@ -46760,12 +46976,12 @@ fast_assign_obj: } free_and_exit_assign_obj: - -exit_assign_obj: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } +exit_assign_obj: + /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); |