summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-12-20 10:35:50 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-12-20 10:35:50 +0100
commit0d8ebbaa7383534f5272930052ae86dedce290d5 (patch)
tree2e7d9b2b98c9c5158140ac2cead06b9a029d0539 /Zend
parent2ab123b84e438458e1070e99cfdcdcd7174fabea (diff)
parent885b3451f4e9616e3d7d8e31cc2270f1b07ab139 (diff)
downloadphp-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.phpt14
-rw-r--r--Zend/zend_vm_def.h10
-rw-r--r--Zend/zend_vm_execute.h360
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);