10000 [DI] Avoid leaking unused env placeholders · symfony/symfony@41f8494 · GitHub
[go: up one dir, main page]

Skip to content

Commit 41f8494

Browse files
committed
[DI] Avoid leaking unused env placeholders
1 parent 671e412 commit 41f8494

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public function process(ContainerBuilder $container)
8484
} finally {
8585
BaseNode::resetPlaceholders();
8686
}
87+
88+
$resolvingBag->clearUnusedEnvPlaceholders();
8789
}
8890

8991
private static function getType($value): string

src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ public function getUnusedEnvPlaceholders(): array
8787
return $this->unusedEnvPlaceholders;
8888
}
8989

90+
public function clearUnusedEnvPlaceholders()
91+
{
92+
$this->unusedEnvPlaceholders = array();
93+
}
94+
9095
/**
9196
* Merges the env placeholders of another EnvPlaceholderParameterBag.
9297
*/

src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,29 @@ public function testEnvWithVariableNode(): void
226226
public function testConfigurationWithoutRootNode(): void
227227
{
228228
$container = new ContainerBuilder();
229-
$container->registerExtension($ext = new EnvExtension(new EnvConfigurationWithoutRootNode()));
229+
$container->registerExtension(new EnvExtension(new EnvConfigurationWithoutRootNode()));
230230
$container->loadFromExtension('env_extension');
231231

232232
$this->doProcess($container);
233233

234234
$this->addToAssertionCount(1);
235235
}
236236

237+
public function testDiscardedEnvInConfig(): void
238+
{
239+
$container = new ContainerBuilder();
240+
$container->setParameter('env(BOOLISH)', '1');
241+
$container->setParameter('boolish', '%env(BOOLISH)%');
242+
$container->registerExtension(new EnvExtension());
243+
$container->prependExtensionConfig('env_extension', array(
244+
'array_node' => array('bool_force_cast' => '%boolish%'),
245+
));
246+
247+
$container->compile(true);
248+
249+
$this->assertSame('1', $container->getParameter('boolish'));
250+
}
251+
237252
private function doProcess(ContainerBuilder $container): void
238253
{
239254
(new MergeExtensionConfigurationPass())->process($container);
@@ -260,8 +275,19 @@ public function getConfigTreeBuilder()
260275
->ifTrue(function ($value) { return !is_array($value); })
261276
->then(function ($value) { return array('child_node' => $value); })
262277
->end()
278+
->beforeNormalization()
279+
->ifArray()
280+
->then(function (array $v) {
281+
if (isset($v['bool_force_cast'])) {
282+
$v['bool_force_cast'] = (bool) $v['bool_force_cast'];
283+
}
284+
285+
return $v;
286+
})
287+
->end()
263288
->children()
264289
->scalarNode('child_node')->end()
290+
->booleanNode('bool_force_cast')->end()
265291
->integerNode('int_unset_at_zero')
266292
->validate()
267293
->ifTrue(function ($value) { return 0 === $value; })

0 commit comments

Comments
 (0)
0