Skip to content

Commit

Permalink
bug #37227 [DependencyInjection][CheckTypeDeclarationsPass] Handle un…
Browse files Browse the repository at this point in the history
…resolved parameters pointing to environment variables (fancyweb)

This PR was merged into the 4.4 branch.

Discussion
----------

[DependencyInjection][CheckTypeDeclarationsPass] Handle unresolved parameters pointing to environment variables

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Follow up to #37193

Unresolved parameters pointing to environment variables can be added to definitions after ResolveParameterPlaceHoldersPass execution. It is the case in the initial reported bug (RegisterListenersPass is executed after ResolveParameterPlaceHoldersPass). In this case, the parameter value is an env placeholder, so we need to try to resolve it.

Commits
-------

dac3c8f [DependencyInjection][CheckTypeDeclarationsPass] Handle unresolved parameters pointing to environment variables
  • Loading branch information
fabpot committed Jun 12, 2020
2 parents f1989fe + dac3c8f commit fd51aeb
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
Expand Up @@ -199,7 +199,9 @@ private function checkType(Definition $checkedDefinition, $value, \ReflectionPar
} elseif (\is_string($value)) {
if ('%' === ($value[0] ?? '') && preg_match('/^%([^%]+)%$/', $value, $match)) {
$value = $this->container->getParameter(substr($value, 1, -1));
} elseif ($envPlaceholderUniquePrefix && false !== strpos($value, 'env_')) {
}

if ($envPlaceholderUniquePrefix && \is_string($value) && false !== strpos($value, 'env_')) {
// If the value is an env placeholder that is either mixed with a string or with another env placeholder, then its resolved value will always be a string, so we don't need to resolve it.
// We don't need to change the value because it is already a string.
if ('' === preg_replace('/'.$envPlaceholderUniquePrefix.'_\w+_[a-f0-9]{32}/U', '', $value, -1, $c) && 1 === $c) {
Expand Down
Expand Up @@ -780,17 +780,27 @@ public function testExpressionLanguageWithSyntheticService()

public function testProcessResolveParameters()
{
$container = new ContainerBuilder();
putenv('ARRAY={"foo":"bar"}');

$container = new ContainerBuilder(new EnvPlaceholderParameterBag([
'env_array_param' => '%env(json:ARRAY)%',
]));
$container->setParameter('array_param', ['foobar']);
$container->setParameter('string_param', 'ccc');

$container
->register('foobar', BarMethodCall::class)
$definition = $container->register('foobar', BarMethodCall::class);
$definition
->addMethodCall('setArray', ['%array_param%'])
->addMethodCall('setString', ['%string_param%']);

(new ResolveParameterPlaceHoldersPass())->process($container);

$definition->addMethodCall('setArray', ['%env_array_param%']);

(new CheckTypeDeclarationsPass(true))->process($container);

$this->addToAssertionCount(1);

putenv('ARRAY=');
}
}

0 comments on commit fd51aeb

Please sign in to comment.