From 550819a655aeea01495649845952b6ca9c3e898d Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Fri, 11 Oct 2019 21:04:41 +0200 Subject: [PATCH] [DI] Unknown env prefix not regornized as such --- .../DependencyInjection/EnvVarProcessor.php | 16 ++++++++++------ .../Tests/EnvVarProcessorTest.php | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php b/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php index 1b8b64cac357..b7c828b124eb 100644 --- a/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php +++ b/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php @@ -126,9 +126,7 @@ public function getEnv($prefix, $name, \Closure $getEnv) } if (false !== $i || 'string' !== $prefix) { - if (null === $env = $getEnv($name)) { - return null; - } + $env = $getEnv($name); } elseif (isset($_ENV[$name])) { $env = $_ENV[$name]; } elseif (isset($_SERVER[$name]) && 0 !== strpos($name, 'HTTP_')) { @@ -173,10 +171,16 @@ public function getEnv($prefix, $name, \Closure $getEnv) throw new EnvNotFoundException(sprintf('Environment variable not found: "%s".', $name)); } - if (null === $env = $this->container->getParameter("env($name)")) { - return null; - } + $env = $this->container->getParameter("env($name)"); + } + } + + if (null === $env) { + if (!isset($this->getProvidedTypes()[$prefix])) { + throw new RuntimeException(sprintf('Unsupported env var prefix "%s".', $prefix)); } + + return null; } if (!is_scalar($env)) { diff --git a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php index df329b4f7e31..313bce597366 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php @@ -9,6 +9,7 @@ use Symfony\Component\DependencyInjection\EnvVarLoaderInterface; use Symfony\Component\DependencyInjection\EnvVarProcessor; use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; class EnvVarProcessorTest extends TestCase { @@ -595,4 +596,17 @@ public function loadEnvVars(): array $this->assertSame(2, $index); } + + public function testGetEnvInvalidPrefixWithDefault() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Unsupported env var prefix'); + $processor = new EnvVarProcessor(new Container()); + + $processor->getEnv('unknown', 'default::FAKE', function ($name) { + $this->assertSame('default::FAKE', $name); + + return null; + }); + } }