Merge branch 'PHP-8.1' into PHP-8.2

* PHP-8.1:
  Keep consistent EG(current_execute_data) after return from generator (#11380)
This commit is contained in:
Dmitry Stogov 2023-06-08 14:55:43 +03:00
commit 42619b2378
2 changed files with 16 additions and 0 deletions

View file

@ -4541,6 +4541,8 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER
ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval); ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval);
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
@ -7899,6 +7901,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
cleanup_live_vars(execute_data, op_num, 0); cleanup_live_vars(execute_data, op_num, 0);
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
EG(current_execute_data) = EX(prev_execute_data);
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
ZEND_VM_RETURN(); ZEND_VM_RETURN();
} else { } else {
@ -7992,6 +7995,7 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
case ZEND_USER_OPCODE_RETURN: case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
EG(current_execute_data) = EX(prev_execute_data);
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
ZEND_VM_RETURN(); ZEND_VM_RETURN();
} else { } else {

12
Zend/zend_vm_execute.h generated
View file

@ -3151,6 +3151,7 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try
cleanup_live_vars(execute_data, op_num, 0); cleanup_live_vars(execute_data, op_num, 0);
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
EG(current_execute_data) = EX(prev_execute_data);
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
ZEND_VM_RETURN(); ZEND_VM_RETURN();
} else { } else {
@ -3244,6 +3245,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
case ZEND_USER_OPCODE_RETURN: case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
EG(current_execute_data) = EX(prev_execute_data);
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
ZEND_VM_RETURN(); ZEND_VM_RETURN();
} else { } else {
@ -4573,6 +4575,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
} }
} }
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
@ -4618,6 +4622,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER
zend_observer_fcall_end(generator->execute_data, &generator->retval); zend_observer_fcall_end(generator->execute_data, &generator->retval);
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
@ -19071,6 +19077,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
} }
} }
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
@ -21725,6 +21733,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
} }
} }
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);
@ -38692,6 +38702,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
} }
} }
EG(current_execute_data) = EX(prev_execute_data);
/* Close the generator to free up resources */ /* Close the generator to free up resources */
zend_generator_close(generator, 1); zend_generator_close(generator, 1);