diff --git a/Zend/tests/named_params/gh17216.phpt b/Zend/tests/named_params/gh17216.phpt new file mode 100644 index 000000000000..4cb4df0ec431 --- /dev/null +++ b/Zend/tests/named_params/gh17216.phpt @@ -0,0 +1,22 @@ +--TEST-- +GH-17216 (Trampoline crash on error) +--FILE-- + "b", 1]; +try { + forward_static_call_array($callback, $array); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +echo "Done\n"; +?> +--EXPECT-- +Cannot use positional argument after named argument +Done diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index e9b6009af05a..fe37b024934d 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -842,7 +842,11 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_ ZEND_CALL_NUM_ARGS(call) = i; cleanup_args: zend_vm_stack_free_args(call); + if (ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) { + zend_free_extra_named_params(call->extra_named_params); + } zend_vm_stack_free_call_frame(call); + zend_release_fcall_info_cache(fci_cache); return SUCCESS; } }