diff options
-rw-r--r-- | Zend/zend_vm_def.h | 16 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 16 |
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)) { |