Commit 346227583da for php.net
commit 346227583da55ed8b4494dd8033ff26dd725bae1
Author: Gina Peter Banyard <girgias@php.net>
Date: Thu Jul 30 13:28:00 2026 +0100
Zend: reuse zend_parse_arg_func() in zend_parse_arg_impl() (#22937)
No need to duplicate the logic
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 72f4727eedd..33128e4a7e3 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -1058,21 +1058,8 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
zend_fcall_info *fci = va_arg(*va, zend_fcall_info *);
zend_fcall_info_cache *fcc = va_arg(*va, zend_fcall_info_cache *);
char *is_callable_error = NULL;
-
- if (check_null && Z_TYPE_P(arg) == IS_NULL) {
- fci->size = 0;
- fcc->function_handler = 0;
- break;
- }
-
- if (zend_fcall_info_init(arg, 0, fci, fcc, NULL, &is_callable_error) == SUCCESS) {
+ if (EXPECTED(zend_parse_arg_func(arg, fci, fcc, check_null, &is_callable_error, c == 'f'))) {
ZEND_ASSERT(!is_callable_error);
- if (c == 'f') {
- /* Release call trampolines: The function may not get called, in which case
- * the trampoline will leak. Force it to be refetched during
- * zend_call_function instead. */
- zend_release_fcall_info_cache(fcc);
- }
break;
}