Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c1749a7

Browse files
committed
[FrameworkBundle] Escape percents in ContainerLintCommand
1 parent f75e9d5 commit c1749a7

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/Symfony/Bundle/FrameworkBundle/Command/ContainerLintCommand.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
2121
use Symfony\Component\DependencyInjection\ContainerBuilder;
2222
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
23+
use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag;
24+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
2325

2426
final class ContainerLintCommand extends Command
2527
{
@@ -72,8 +74,40 @@ private function getContainerBuilder(): ContainerBuilder
7274
$container = $buildContainer();
7375
} else {
7476
(new XmlFileLoader($container = new ContainerBuilder(), new FileLocator()))->load($kernel->getContainer()->getParameter('debug.container.dump'));
77+
78+
$this->escapeParameters($container->getParameterBag());
7579
}
7680

7781
return $this->containerBuilder = $container;
7882
}
83+
84+
private function escapeParameters(ParameterBagInterface $parameterBag): void
85+
{
86+
$isEnvPlaceholderParameterBag = $parameterBag instanceof EnvPlaceholderParameterBag;
87+
88+
foreach ($parameterBag->all() as $name => $value) {
89+
$parameterBag->set($name, $this->escape($value, $isEnvPlaceholderParameterBag));
90+
}
91+
}
92+
93+
private function escape($value, bool $isEnvPlaceholderParameterBag)
94+
{
95+
if (\is_string($value)) {
96+
$escapedValue = str_replace('%', '%%', $value);
97+
98+
return !$isEnvPlaceholderParameterBag ? $escapedValue : preg_replace('/%(%env\((?:\w*+:)*+\w++\)%)%/', '$1', $escapedValue);
99+
}
100+
101+
if (\is_array($value)) {
102+
$escapedValue = [];
103+
104+
foreach ($value as $k => $v) {
105+
$escapedValue[$k] = $this->escape($v, $isEnvPlaceholderParameterBag);
106+
}
107+
108+
return $escapedValue;
109+
}
110+
111+
return $value;
112+
}
79113
}

0 commit comments

Comments
 (0)