Skip to content

Commit 2407582

Browse files
committed
feat: allow empty extension name, fixes #19812
1 parent 1d131f8 commit 2407582

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

main/php_ini.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,15 @@ static void php_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_t
200200

201201
/* PHP and Zend extensions are not added into configuration hash! */
202202
if (!is_special_section && zend_string_equals_literal_ci(Z_STR_P(arg1), PHP_EXTENSION_TOKEN)) { /* load PHP extension */
203-
extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
204-
zend_llist_add_element(&extension_lists.functions, &extension_name);
203+
if (Z_STRLEN_P(arg2) > 0) {
204+
extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
205+
zend_llist_add_element(&extension_lists.functions, &extension_name);
206+
}
205207
} else if (!is_special_section && zend_string_equals_literal_ci(Z_STR_P(arg1), ZEND_EXTENSION_TOKEN)) { /* load Zend extension */
206-
extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
207-
zend_llist_add_element(&extension_lists.engine, &extension_name);
208+
if (Z_STRLEN_P(arg2) > 0) {
209+
extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
210+
zend_llist_add_element(&extension_lists.engine, &extension_name);
211+
}
208212

209213
/* All other entries are added into either configuration_hash or active ini section array */
210214
} else {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
Empty extension loading should not generate warnings
3+
--FILE--
4+
<?php
5+
6+
function testEmptyExtension($type, $value) {
7+
$cmd = [
8+
PHP_BINARY, '-n',
9+
'-dextension_dir=' . ini_get('extension_dir'),
10+
'-d' . $type . '=' . $value,
11+
'-r', 'echo "OK\n";'
12+
];
13+
$proc = proc_open($cmd, [['null'], ['pipe', 'w'], ['pipe', 'w']], $pipes);
14+
$stdout = stream_get_contents($pipes[1]);
15+
$stderr = stream_get_contents($pipes[2]);
16+
proc_close($proc);
17+
18+
if ($stderr) {
19+
echo "STDERR: " . trim($stderr) . "\n";
20+
}
21+
echo trim($stdout) . "\n";
22+
}
23+
24+
echo "Testing empty extension directive:\n";
25+
testEmptyExtension('extension', '');
26+
27+
echo "Testing empty zend_extension directive:\n";
28+
testEmptyExtension('zend_extension', '');
29+
30+
?>
31+
--EXPECT--
32+
Testing empty extension directive:
33+
OK
34+
Testing empty zend_extension directive:
35+
OK

0 commit comments

Comments
 (0)