summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_vm_def.h16
-rw-r--r--Zend/zend_vm_execute.h16
2 files changed, 10 insertions, 22 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 471725107b..59217d2bb0 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -5820,7 +5820,9 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
while (1) {
if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
/* reached end of iteration */
- ZEND_VM_C_GOTO(fe_fetch_r_exit);
+ZEND_VM_C_LABEL(fe_fetch_r_exit):
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
@@ -5846,9 +5848,10 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
+ } else {
zend_object_iterator *iter;
+ ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
if ((iter = zend_iterator_unwrap(array)) == NULL) {
/* plain object */
@@ -5932,15 +5935,6 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
}
value_type = Z_TYPE_INFO_P(value);
}
- } else {
- zend_error(E_WARNING, "Invalid argument supplied for foreach()");
- if (UNEXPECTED(EG(exception))) {
- UNDEF_RESULT();
- HANDLE_EXCEPTION();
- }
-ZEND_VM_C_LABEL(fe_fetch_r_exit):
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
}
if (EXPECTED(OP2_TYPE == IS_CV)) {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 6889571b50..ee402b9644 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -21258,7 +21258,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
while (1) {
if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
/* reached end of iteration */
- goto fe_fetch_r_exit;
+fe_fetch_r_exit:
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
@@ -21284,9 +21286,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
+ } else {
zend_object_iterator *iter;
+ ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
if ((iter = zend_iterator_unwrap(array)) == NULL) {
/* plain object */
@@ -21370,15 +21373,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
}
value_type = Z_TYPE_INFO_P(value);
}
- } else {
- zend_error(E_WARNING, "Invalid argument supplied for foreach()");
- if (UNEXPECTED(EG(exception))) {
- UNDEF_RESULT();
- HANDLE_EXCEPTION();
- }
-fe_fetch_r_exit:
- ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
- ZEND_VM_CONTINUE();
}
if (EXPECTED(opline->op2_type == IS_CV)) {