Skip to content

Commit 764d623

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

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

src/Symfony/Component/DependencyInjection/Container.php

Lines changed: 9 additions & 1 deletion
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 ('string' === $prefix) {
399+
$prefix = '';
400+
}
401+
}
394402

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

src/Symfony/Component/DependencyInjection/EnvVarProcessor.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public function getEnv(string $prefix, string $name, \Closure $getEnv)
126126
}
127127
}
128128

129-
if (false !== $i || 'string' !== $prefix) {
129+
if (false !== $i || !\in_array($prefix, ['', 'string'], true)) {
130130
$env = $getEnv($name);
131131
} elseif (isset($_ENV[$name])) {
132132
$env = $_ENV[$name];
@@ -177,6 +177,10 @@ public function getEnv(string $prefix, string $name, \Closure $getEnv)
177177
}
178178

179179
if (null === $env) {
180+
if ('' === $prefix) {
181+
return null;
182+
}
183+
180184
if (!isset($this->getProvidedTypes()[$prefix])) {
181185
throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix));
182186
}
@@ -190,7 +194,7 @@ public function getEnv(string $prefix, string $name, \Closure $getEnv)
190194
throw new RuntimeException(sprintf('Non-scalar env var "%s" cannot be cast to "%s".', $name, $prefix));
191195
}
192196

193-
if ('string' === $prefix) {
197+
if (\in_array($prefix, ['', 'string'], true)) {
194198
return (string) $env;
195199
}
196200

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

Lines changed: 17 additions & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy