From b73bcaa47c50a8cee1bdde16cf48342f0899b516 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Mon, 21 Oct 2024 16:49:07 +0200 Subject: [PATCH] Fix GH-16266: _ZendTestClass::test() segfaults on named parameter We need to assign the proper number of arguments. Closes GH-16271. --- ext/zend_test/test.c | 4 ++-- ext/zend_test/tests/gh16266.phpt | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 ext/zend_test/tests/gh16266.phpt diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 8989413317d..55e21a6c40a 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -659,7 +659,7 @@ static zend_function *zend_test_class_method_get(zend_object **object, zend_stri } memset(fptr, 0, sizeof(zend_internal_function)); fptr->type = ZEND_INTERNAL_FUNCTION; - fptr->num_args = 1; + fptr->num_args = 0; fptr->scope = (*object)->ce; fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER; fptr->function_name = zend_string_copy(name); @@ -682,7 +682,7 @@ static zend_function *zend_test_class_static_method_get(zend_class_entry *ce, ze } memset(fptr, 0, sizeof(zend_internal_function)); fptr->type = ZEND_INTERNAL_FUNCTION; - fptr->num_args = 1; + fptr->num_args = 0; fptr->scope = ce; fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_STATIC; fptr->function_name = zend_string_copy(name); diff --git a/ext/zend_test/tests/gh16266.phpt b/ext/zend_test/tests/gh16266.phpt new file mode 100644 index 00000000000..44cb7ef807c --- /dev/null +++ b/ext/zend_test/tests/gh16266.phpt @@ -0,0 +1,21 @@ +--TEST-- +GH-16266 (_ZendTestClass::test() segfaults on named parameter) +--EXTENSIONS-- +zend_test +--FILE-- +test('a', 'b', c: 'c'); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +try { + _ZendTestClass::test('a', 'b', c: 'c'); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +?> +--EXPECT-- +Unknown named parameter $c +Unknown named parameter $c