Skip to content

Commit ebe5845

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: [ci skip] NEWS Fix compilation warning Fix crash when memory limit is exceeded during generator initialization
2 parents c34ab77 + 845c6b3 commit ebe5845

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

Zend/tests/generators/gh9801.phpt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
--TEST--
2+
Bug GH-9801 (Crash when memory limit is exceeded during generator initialization)
3+
--INI--
4+
memory_limit=16m
5+
--FILE--
6+
<?php
7+
8+
function a() {
9+
yield from a();
10+
}
11+
12+
foreach(a() as $v);
13+
--EXPECTF--
14+
Fatal error: Allowed memory size of %d bytes exhausted %s

Zend/zend_vm_def.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4444,6 +4444,7 @@ ZEND_VM_HANDLER(139, ZEND_GENERATOR_CREATE, ANY, ANY)
44444444
zend_execute_data *gen_execute_data;
44454445
uint32_t num_args, used_stack, call_info;
44464446

4447+
SAVE_OPLINE();
44474448
object_init_ex(return_value, zend_ce_generator);
44484449

44494450
/*

Zend/zend_vm_execute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,6 +2031,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(
20312031
zend_execute_data *gen_execute_data;
20322032
uint32_t num_args, used_stack, call_info;
20332033

2034+
SAVE_OPLINE();
20342035
object_init_ex(return_value, zend_ce_generator);
20352036

20362037
/*

main/php_network.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,13 @@ PHPAPI void _php_emit_fd_setsize_warning(int max_fd);
214214
static inline bool _php_check_fd_setsize(php_socket_t *max_fd, int setsize)
215215
{
216216
#ifdef PHP_WIN32
217+
(void)(max_fd); // Unused
217218
if (setsize + 1 >= FD_SETSIZE) {
218219
_php_emit_fd_setsize_warning(setsize);
219220
return false;
220221
}
221222
#else
223+
(void)(setsize); // Unused
222224
if (*max_fd >= FD_SETSIZE) {
223225
_php_emit_fd_setsize_warning(*max_fd);
224226
*max_fd = FD_SETSIZE - 1;

0 commit comments

Comments
 (0)