Skip to content

Commit 658fc85

Browse files
committed
delay fetching iterator until after guard
1 parent 8886795 commit 658fc85

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

Zend/zend_vm_def.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6233,7 +6233,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
62336233
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
62346234
} else {
62356235
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
6236-
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
6236+
zend_object_iterator *iter;
62376237
zend_bool is_empty;
62386238

62396239
if (UNEXPECTED(ZEND_OBJECT_HAS_TYPE_HINTS(array_ptr))) {
@@ -6244,6 +6244,8 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
62446244
HANDLE_EXCEPTION();
62456245
}
62466246

6247+
iter = ce->get_iterator(ce, array_ptr, 1);
6248+
62476249
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
62486250
if (OP1_TYPE == IS_VAR) {
62496251
FREE_OP1_VAR_PTR();

Zend/zend_vm_execute.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4308,7 +4308,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
43084308
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43094309
} else {
43104310
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
4311-
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
4311+
zend_object_iterator *iter;
43124312
zend_bool is_empty;
43134313

43144314
if (UNEXPECTED(ZEND_OBJECT_HAS_TYPE_HINTS(array_ptr))) {
@@ -4319,6 +4319,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
43194319
HANDLE_EXCEPTION();
43204320
}
43214321

4322+
iter = ce->get_iterator(ce, array_ptr, 1);
4323+
43224324
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
43234325
if (IS_CONST == IS_VAR) {
43244326

@@ -13211,7 +13213,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
1321113213
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1321213214
} else {
1321313215
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
13214-
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
13216+
zend_object_iterator *iter;
1321513217
zend_bool is_empty;
1321613218

1321713219
if (UNEXPECTED(ZEND_OBJECT_HAS_TYPE_HINTS(array_ptr))) {
@@ -13222,6 +13224,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
1322213224
HANDLE_EXCEPTION();
1322313225
}
1322413226

13227+
iter = ce->get_iterator(ce, array_ptr, 1);
13228+
1322513229
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
1322613230
if (IS_TMP_VAR == IS_VAR) {
1322713231

@@ -16809,7 +16813,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
1680916813
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1681016814
} else {
1681116815
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
16812-
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
16816+
zend_object_iterator *iter;
1681316817
zend_bool is_empty;
1681416818

1681516819
if (UNEXPECTED(ZEND_OBJECT_HAS_TYPE_HINTS(array_ptr))) {
@@ -16820,6 +16824,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
1682016824
HANDLE_EXCEPTION();
1682116825
}
1682216826

16827+
iter = ce->get_iterator(ce, array_ptr, 1);
16828+
1682316829
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
1682416830
if (IS_VAR == IS_VAR) {
1682516831
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -37090,7 +37096,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
3709037096
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3709137097
} else {
3709237098
zend_class_entry *ce = Z_OBJCE_P(array_ptr);
37093-
zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
37099+
zend_object_iterator *iter;
3709437100
zend_bool is_empty;
3709537101

3709637102
if (UNEXPECTED(ZEND_OBJECT_HAS_TYPE_HINTS(array_ptr))) {
@@ -37101,6 +37107,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
3710137107
HANDLE_EXCEPTION();
3710237108
}
3710337109

37110+
iter = ce->get_iterator(ce, array_ptr, 1);
37111+
3710437112
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3710537113
if (IS_CV == IS_VAR) {
3710637114

0 commit comments

Comments
 (0)