Skip to content

Commit 06d6873

Browse files
authored
Keep consistent EG(current_execute_data) after return from generator (#11380)
1 parent 5604f7a commit 06d6873

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Zend/zend_vm_def.h

+4
Original file line numberDiff line numberDiff line change
@@ -4549,6 +4549,8 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER
45494549

45504550
ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval);
45514551

4552+
EG(current_execute_data) = EX(prev_execute_data);
4553+
45524554
/* Close the generator to free up resources */
45534555
zend_generator_close(generator, 1);
45544556

@@ -7837,6 +7839,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
78377839
cleanup_live_vars(execute_data, op_num, 0);
78387840
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
78397841
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7842+
EG(current_execute_data) = EX(prev_execute_data);
78407843
zend_generator_close(generator, 1);
78417844
ZEND_VM_RETURN();
78427845
} else {
@@ -7930,6 +7933,7 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
79307933
case ZEND_USER_OPCODE_RETURN:
79317934
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
79327935
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7936+
EG(current_execute_data) = EX(prev_execute_data);
79337937
zend_generator_close(generator, 1);
79347938
ZEND_VM_RETURN();
79357939
} else {

Zend/zend_vm_execute.h

+12
Original file line numberDiff line numberDiff line change
@@ -3061,6 +3061,7 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try
30613061
cleanup_live_vars(execute_data, op_num, 0);
30623062
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
30633063
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3064+
EG(current_execute_data) = EX(prev_execute_data);
30643065
zend_generator_close(generator, 1);
30653066
ZEND_VM_RETURN();
30663067
} else {
@@ -3154,6 +3155,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
31543155
case ZEND_USER_OPCODE_RETURN:
31553156
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
31563157
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3158+
EG(current_execute_data) = EX(prev_execute_data);
31573159
zend_generator_close(generator, 1);
31583160
ZEND_VM_RETURN();
31593161
} else {
@@ -4517,6 +4519,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
45174519
}
45184520
}
45194521

4522+
EG(current_execute_data) = EX(prev_execute_data);
4523+
45204524
/* Close the generator to free up resources */
45214525
zend_generator_close(generator, 1);
45224526

@@ -4562,6 +4566,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER
45624566

45634567
zend_observer_fcall_end(generator->execute_data, &generator->retval);
45644568

4569+
EG(current_execute_data) = EX(prev_execute_data);
4570+
45654571
/* Close the generator to free up resources */
45664572
zend_generator_close(generator, 1);
45674573

@@ -18954,6 +18960,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
1895418960
}
1895518961
}
1895618962

18963+
EG(current_execute_data) = EX(prev_execute_data);
18964+
1895718965
/* Close the generator to free up resources */
1895818966
zend_generator_close(generator, 1);
1895918967

@@ -21612,6 +21620,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
2161221620
}
2161321621
}
2161421622

21623+
EG(current_execute_data) = EX(prev_execute_data);
21624+
2161521625
/* Close the generator to free up resources */
2161621626
zend_generator_close(generator, 1);
2161721627

@@ -38480,6 +38490,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
3848038490
}
3848138491
}
3848238492

38493+
EG(current_execute_data) = EX(prev_execute_data);
38494+
3848338495
/* Close the generator to free up resources */
3848438496
zend_generator_close(generator, 1);
3848538497

0 commit comments

Comments
 (0)