[GIT-PULLS] [php-src] PR #23102: Enforce zero arity in apache_get_version() and apache_get_modules()

[email protected] (lacatoire)
Newsgroups php.git-pulls
Message-ID <[email protected]>
Pull Request: https://github.com/php/php-src/pull/23102
Author: lacatoire

`sapi/apache2handler/php_functions.stub.php` declares both functions with no parameters:

```php
function apache_get_version(): string|false {}
function apache_get_modules(): array {}
```

The generated arginfo agrees and `ReflectionFunction::getNumberOfParameters()` returns 0, but neither implementation calls `ZEND_PARSE_PARAMETERS_NONE()`, so the declared arity is never enforced and extra positional arguments are silently accepted.

Served by `php:8.4-apache` and `php:8.5-apache` (PHP 8.4.24 and 8.5.9, Apache 2.4.68), identical on both:

```php
<?php
var_dump(apache_get_version(1, 2, 3));
var_dump(count(apache_get_modules(1, 2)));
var_dump(apache_request_headers(1));
```

```
string(22) "Apache/2.4.68 (Debian)"
int(28)

Fatal error: Uncaught ArgumentCountError: apache_request_headers() expects exactly 0 arguments, 1 given
```

The first two calls should throw like the third one.

Every other zero-arity function of the same SAPI does enforce its arity, because it calls the macro: `apache_request_headers()` (`php_functions.c:167`), `apache_response_headers()` (`php_functions.c:188`), and `getallheaders()` through its alias. The litespeed implementation of the same function name, `PHP_FUNCTION(apache_get_modules)` in `sapi/litespeed/lsapi_main.c:1710`, also opens with `ZEND_PARSE_PARAMETERS_NONE()`, so the two SAPIs currently disagree on whether `apache_get_modules(1)` is an error.

Only the positional path is affected: named arguments are rejected by arginfo already, `apache_get_version(x: 1)` throws `Error: Unknown named parameter $x`.

No stub or arginfo change is needed, the stub already says zero parameters. Targeting master rather than a stable branch, since the change turns a silently accepted call into an `ArgumentCountError`.

Sources:
- 11a95749b1 "Convert more zend_parse_parameters_none() to fast ZPP" converted the existing call sites in this file; these two never had one, so the sweep did not reach them.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.