From ad889c9f377ee56aa9fa11e094ec0d55c396f776 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 4 Feb 2013 12:10:17 +0100 Subject: [PATCH] [DependencyInjection] fixed a circular call (closes #6864) --- .../Component/DependencyInjection/Dumper/PhpDumper.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 2a29b01c9005a..889394f3ba52c 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -958,11 +958,11 @@ private function getDefinitionsFromArguments(array $arguments) * * @return Boolean */ - private function hasReference($id, array $arguments, $deep = false) + private function hasReference($id, array $arguments, $deep = false, $visited = array()) { foreach ($arguments as $argument) { if (is_array($argument)) { - if ($this->hasReference($id, $argument, $deep)) { + if ($this->hasReference($id, $argument, $deep, $visited)) { return true; } } elseif ($argument instanceof Reference) { @@ -970,11 +970,13 @@ private function hasReference($id, array $arguments, $deep = false) return true; } - if ($deep) { + if ($deep && !isset($visited[(string) $argument])) { + $visited[(string) $argument] = true; + $service = $this->container->getDefinition((string) $argument); $arguments = array_merge($service->getMethodCalls(), $service->getArguments(), $service->getProperties()); - if ($this->hasReference($id, $arguments, $deep)) { + if ($this->hasReference($id, $arguments, $deep, $visited)) { return true; } }