From a8e6aac2f58ca3f12c931f20a6de29ef46686dc8 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 29 Aug 2017 14:43:33 +0200 Subject: [PATCH] [DI] Don't track merged configs when the extension doesn't expose it --- .../Compiler/MergeExtensionConfigurationPass.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php b/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php index 853b1fd05e..c3b4d78dd6 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php @@ -67,7 +67,7 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) { // don't keep track of env vars that are *overridden* when configs are merged - $resolvingBag->freezeAfterProcessing($extension); + $resolvingBag->freezeAfterProcessing($extension, $tmpContainer); } $container->merge($tmpContainer); @@ -92,12 +92,16 @@ class MergeExtensionConfigurationParameterBag extends EnvPlaceholderParameterBag $this->mergeEnvPlaceholders($parameterBag); } - public function freezeAfterProcessing(Extension $extension) + public function freezeAfterProcessing(Extension $extension, ContainerBuilder $container) { + if (!$config = $extension->getProcessedConfigs()) { + // Extension::processConfiguration() wasn't called, we cannot know how configs were merged + return; + } $this->processedEnvPlaceholders = array(); - // serialize config to catch env vars nested in object graphs - $config = serialize($extension->getProcessedConfigs()); + // serialize config and container to catch env vars nested in object graphs + $config = serialize($config).serialize($container->getDefinitions()).serialize($container->getAliases()).serialize($container->getParameterBag()->all()); foreach (parent::getEnvPlaceholders() as $env => $placeholders) { foreach ($placeholders as $placeholder) {