Skip to content

Commit 024526a

Browse files
committed
[DependencyInjection] Fix autocasting null env values to empty string
1 parent 7a8457d commit 024526a

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

src/Symfony/Component/DependencyInjection/Container.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,15 @@ protected function getEnv(string $name)
390390
$prefix = 'string';
391391
$localName = $name;
392392
}
393-
$processor = $processors->has($prefix) ? $processors->get($prefix) : new EnvVarProcessor($this);
393+
394+
if ($processors->has($prefix)) {
395+
$processor = $processors->get($prefix);
396+
} else {
397+
$processor = new EnvVarProcessor($this);
398+
if (false === $i) {
399+
$prefix = '';
400+
}
401+
}
394402

395403
$this->resolving[$envName] = true;
396404
try {

src/Symfony/Component/DependencyInjection/EnvVarProcessor.php

+10
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ public function getEnv(string $prefix, string $name, \Closure $getEnv)
126126
}
127127
}
128128

129+
$returnNull = false;
130+
if ('' === $prefix) {
131+
$returnNull = true;
132+
$prefix = 'string';
133+
}
134+
129135
if (false !== $i || 'string' !== $prefix) {
130136
$env = $getEnv($name);
131137
} elseif (isset($_ENV[$name])) {
@@ -177,6 +183,10 @@ public function getEnv(string $prefix, string $name, \Closure $getEnv)
177183
}
178184

179185
if (null === $env) {
186+
if ($returnNull) {
187+
return null;
188+
}
189+
180190
if (!isset($this->getProvidedTypes()[$prefix])) {
181191
throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix));
182192
}

src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php

+17-1
Original file line numberDiff line numberDiff line change
@@ -763,12 +763,13 @@ public static function provideGetEnvUrlPath()
763763

764764
/**
765765
* @testWith ["", "string"]
766+
* [null, ""]
766767
* [false, "bool"]
767768
* [true, "not"]
768769
* [0, "int"]
769770
* [0.0, "float"]
770771
*/
771-
public function testGetEnvCastsNull($expected, string $prefix)
772+
public function testGetEnvCastsNullBehavior($expected, string $prefix)
772773
{
773774
$processor = new EnvVarProcessor(new Container());
774775

@@ -778,4 +779,19 @@ public function testGetEnvCastsNull($expected, string $prefix)
778779
});
779780
}));
780781
}
782+
783+
public function testGetEnvWithEmptyStringPrefixCastsToString()
784+
{
785+
$processor = new EnvVarProcessor(new Container());
786+
unset($_ENV['FOO']);
787+
$_ENV['FOO'] = 4;
788+
789+
try {
790+
$this->assertSame('4', $processor->getEnv('', 'FOO', static function () {
791+
$this->fail('Should not be called');
792+
}));
793+
} finally {
794+
unset($_ENV['FOO']);
795+
}
796+
}
781797
}

0 commit comments

Comments
 (0)