Skip to content

Commit 4bc7ea3

Browse files
committed
Merge branch 'PHP-8.3'
2 parents 413f2cd + 8edd621 commit 4bc7ea3

File tree

3 files changed

+93
-3
lines changed

3 files changed

+93
-3
lines changed

sapi/fpm/fpm/fpm_conf.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,22 @@ static int fpm_conf_expand_pool_name(char **value) {
213213
static char *fpm_conf_set_boolean(zval *value, void **config, intptr_t offset) /* {{{ */
214214
{
215215
zend_string *val = Z_STR_P(value);
216-
bool value_y = zend_string_equals_literal(val, "1");
217-
bool value_n = ZSTR_LEN(val) == 0; /* Empty string is the only valid false value */
216+
/* we need to check all allowed values to correctly set value from the environment variable */
217+
bool value_y = (
218+
zend_string_equals_literal(val, "1") ||
219+
zend_string_equals_literal(val, "yes") ||
220+
zend_string_equals_literal(val, "true") ||
221+
zend_string_equals_literal(val, "on")
222+
);
223+
bool value_n = (
224+
value_y || ZSTR_LEN(val) == 0 ||
225+
zend_string_equals_literal(val, "0") ||
226+
zend_string_equals_literal(val, "no") ||
227+
zend_string_equals_literal(val, "none") ||
228+
zend_string_equals_literal(val, "false") ||
229+
zend_string_equals_literal(val, "off")
230+
);
231+
218232

219233
if (!value_y && !value_n) {
220234
return "invalid boolean value";
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
--TEST--
2+
FPM: GH-13563 - conf boolean environment variables values
3+
--SKIPIF--
4+
<?php
5+
include "skipif.inc";
6+
FPM\Tester::skipIfRoot();
7+
?>
8+
--FILE--
9+
<?php
10+
11+
require_once "tester.inc";
12+
13+
$cfg = <<<EOT
14+
[global]
15+
error_log = {{FILE:LOG}}
16+
log_limit = 1024
17+
log_buffering = \${FPM_TEST_LOG_BUF}
18+
daemonize = \${FPM_TEST_DAEMONIZE}
19+
[unconfined]
20+
listen = {{ADDR}}
21+
process.dumpable = \${FPM_TEST_PROC_DUMP}
22+
pm = dynamic
23+
pm.max_children = 5
24+
pm.start_servers = 1
25+
pm.min_spare_servers = 1
26+
pm.max_spare_servers = 3
27+
request_terminate_timeout_track_finished = \${FPM_TEST_REQ_TERM_TRACK_FIN}
28+
catch_workers_output = \${FPM_TEST_CATCH_WRK_OUT}
29+
decorate_workers_output = \${FPM_TEST_DECOR_WRK_OUT}
30+
clear_env = \${FPM_TEST_CLEAR_ENV}
31+
EOT;
32+
33+
$code = <<<EOT
34+
<?php
35+
foreach (getenv() as \$name => \$val) {
36+
if (str_starts_with(\$name, 'FPM_TEST')) {
37+
printf("%s: %s\n", \$name, \$val);
38+
}
39+
}
40+
file_put_contents('php://stderr', str_repeat('a', 20) . "\n");
41+
EOT;
42+
43+
$tester = new FPM\Tester($cfg, $code);
44+
$tester->start(envVars: [
45+
'FPM_TEST_LOG_BUF' => 'on',
46+
'FPM_TEST_DAEMONIZE' => 'false',
47+
'FPM_TEST_PROC_DUMP' => 'no',
48+
'FPM_TEST_CATCH_WRK_OUT' => 'yes',
49+
'FPM_TEST_DECOR_WRK_OUT' => 'true',
50+
'FPM_TEST_CLEAR_ENV' => 'none',
51+
'FPM_TEST_REQ_TERM_TRACK_FIN' => '0',
52+
]);
53+
$tester->expectLogStartNotices();
54+
$tester->request()->expectBody([
55+
'FPM_TEST_LOG_BUF: on',
56+
'FPM_TEST_DAEMONIZE: false',
57+
'FPM_TEST_PROC_DUMP: no',
58+
'FPM_TEST_CATCH_WRK_OUT: yes',
59+
'FPM_TEST_DECOR_WRK_OUT: true',
60+
'FPM_TEST_CLEAR_ENV: none',
61+
'FPM_TEST_REQ_TERM_TRACK_FIN: 0',
62+
]);
63+
$tester->terminate();
64+
$tester->expectLogMessage('a', 1024, 20, true);
65+
$tester->close();
66+
67+
?>
68+
Done
69+
--EXPECT--
70+
Done
71+
--CLEAN--
72+
<?php
73+
require_once "tester.inc";
74+
FPM\Tester::clean();
75+
?>

sapi/fpm/tests/tester.inc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@ class Tester
514514
bool $daemonize = false,
515515
array $extensions = [],
516516
array $iniEntries = [],
517+
array $envVars = [],
517518
) {
518519
$configFile = $this->createConfig();
519520
$desc = $this->outDesc ? [] : [1 => array('pipe', 'w'), 2 => array('redirect', 1)];
@@ -547,7 +548,7 @@ class Tester
547548
$cmd = array_merge($cmd, $extraArgs);
548549
$this->trace('Starting FPM using command:', $cmd, true);
549550

550-
$this->masterProcess = proc_open($cmd, $desc, $pipes);
551+
$this->masterProcess = proc_open($cmd, $desc, $pipes, null, $envVars);
551552
register_shutdown_function(
552553
function ($masterProcess) use ($configFile) {
553554
@unlink($configFile);

0 commit comments

Comments
 (0)