1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Merge branch 'PHP-8.2' into PHP-8.3

* PHP-8.2:
  Fix missing handling of CALLABLE_CONVERT in cleanup_unfinished_calls()
This commit is contained in:
Ilija Tovilo
2024-04-19 20:06:15 +02:00
3 changed files with 30 additions and 0 deletions

2
NEWS
View File

@@ -11,6 +11,8 @@ PHP NEWS
Zend/zend_opcode.c). (nielsdos)
. Fixed bug GH-13942 (Align the behavior of zend-max-execution-timers with
other timeout implementations). (Kévin Dunglas)
. Fixed bug GH-14003 (Broken cleanup of unfinished calls with callable convert
parameters). (ilutov)
- Fibers:
. Fixed bug GH-13903 (ASAN false positive underflow when executing copy()).

24
Zend/tests/gh14003.phpt Normal file
View File

@@ -0,0 +1,24 @@
--TEST--
GH-14003: Missing handling of CALLABLE_CONVERT in cleanup_unfinished_calls()
--FILE--
<?php
function foo(string $key): string {
throw new \Exception('Test');
}
array_filter(
array_combine(
['a'],
array_map(foo(...), ['a']),
),
);
?>
--EXPECTF--
Fatal error: Uncaught Exception: Test in %s:%d
Stack trace:
#0 [internal function]: foo('a')
#1 %s(%d): array_map(Object(Closure), Array)
#2 {main}
thrown in %s on line %d

View File

@@ -4231,6 +4231,7 @@ ZEND_API void zend_unfinished_calls_gc(zend_execute_data *execute_data, zend_exe
case ZEND_DO_ICALL:
case ZEND_DO_UCALL:
case ZEND_DO_FCALL_BY_NAME:
case ZEND_CALLABLE_CONVERT:
level++;
break;
case ZEND_INIT_FCALL:
@@ -4286,6 +4287,7 @@ ZEND_API void zend_unfinished_calls_gc(zend_execute_data *execute_data, zend_exe
case ZEND_DO_ICALL:
case ZEND_DO_UCALL:
case ZEND_DO_FCALL_BY_NAME:
case ZEND_CALLABLE_CONVERT:
level++;
break;
case ZEND_INIT_FCALL:
@@ -4364,6 +4366,7 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o
case ZEND_DO_ICALL:
case ZEND_DO_UCALL:
case ZEND_DO_FCALL_BY_NAME:
case ZEND_CALLABLE_CONVERT:
level++;
break;
case ZEND_INIT_FCALL:
@@ -4419,6 +4422,7 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o
case ZEND_DO_ICALL:
case ZEND_DO_UCALL:
case ZEND_DO_FCALL_BY_NAME:
case ZEND_CALLABLE_CONVERT:
level++;
break;
case ZEND_INIT_FCALL: