Skip to content

Commit

Permalink
bug #33960 [DI] Unknown env prefix not recognized as such (ro0NL)
Browse files Browse the repository at this point in the history
This PR was submitted for the 4.3 branch but it was merged into the 4.4 branch instead.

Discussion
----------

[DI] Unknown env prefix not recognized as such

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #... <!-- prefix each issue number with "Fix #", if any -->
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

This is a failing test to illustrate the difference between real and fake env vars when using an unknown prefix, followed by the `default` prefix.

```
%env(unknown:default::REAL)%
// Unsupported env var prefix "unknown".

%env(unknown:default::FAKE)%
// null
```

For `default::FAKE` we get `null` at

https://github.com/symfony/symfony/blob/38b9a27976d36c4ffbfeb9e666319d77ffc8b3c0/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php#L103

which is then preserved at

https://github.com/symfony/symfony/blob/38b9a27976d36c4ffbfeb9e666319d77ffc8b3c0/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php#L123

need inspiration for a patch still :)

Commits
-------

550819a [DI] Unknown env prefix not regornized as such
  • Loading branch information
nicolas-grekas committed Feb 4, 2020
2 parents a59ce75 + 550819a commit b1b64c1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
16 changes: 10 additions & 6 deletions src/Symfony/Component/DependencyInjection/EnvVarProcessor.php
Expand Up @@ -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_')) {
Expand Down Expand Up @@ -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)) {
Expand Down
Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
});
}
}

0 comments on commit b1b64c1

Please sign in to comment.