[PHP-CVS] [php-src] master: Zend: reuse zend_parse_arg_func() in zend_parse_arg_impl() (#22937)

[email protected] (Gina Peter Banyard via GitHub) Thu, 30 Jul 2026 12:28:03 +0000
Newsgroups php.cvs
Message-ID <[email protected]>
Author: Gina Peter Banyard (Girgias)
Committer: GitHub (web-flow)
Pusher: Girgias
Date: 2026-07-30T13:28:00+01:00

Commit: https://github.com/php/php-src/commit/346227583da55ed8b4494dd8033ff26dd725bae1
Raw diff: https://github.com/php/php-src/commit/346227583da55ed8b4494dd8033ff26dd725bae1.diff

Zend: reuse zend_parse_arg_func() in zend_parse_arg_impl() (#22937)

No need to duplicate the logic

Changed paths:
  M  Zend/zend_API.c


Diff:

diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 72f4727eeddf..33128e4a7e37 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;
 				}