Skip to content

Commit afc1f0d

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-17216: Trampoline crash on error
2 parents c4bb6e6 + 6274327 commit afc1f0d

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

Zend/tests/named_params/gh17216.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
GH-17216 (Trampoline crash on error)
3+
--FILE--
4+
<?php
5+
class TrampolineTest {
6+
public function __call(string $name, array $arguments) {
7+
var_dump($name, $arguments);
8+
}
9+
}
10+
$o = new TrampolineTest();
11+
$callback = [$o, 'trampoline'];
12+
$array = ["a" => "b", 1];
13+
try {
14+
forward_static_call_array($callback, $array);
15+
} catch (Error $e) {
16+
echo $e->getMessage(), "\n";
17+
}
18+
echo "Done\n";
19+
?>
20+
--EXPECT--
21+
Cannot use positional argument after named argument
22+
Done

Zend/zend_execute_API.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,11 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_
884884
ZEND_CALL_NUM_ARGS(call) = i;
885885
cleanup_args:
886886
zend_vm_stack_free_args(call);
887+
if (ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
888+
zend_free_extra_named_params(call->extra_named_params);
889+
}
887890
zend_vm_stack_free_call_frame(call);
891+
zend_release_fcall_info_cache(fci_cache);
888892
return SUCCESS;
889893
}
890894
}

0 commit comments

Comments
 (0)