[Security] fixed a leak in the ContextListener

This commit is contained in:
Fabien Potencier 2013-09-06 15:29:34 +02:00
parent abb8042249
commit 2fd8a7acf3

View File

@ -38,6 +38,7 @@ class ContextListener implements ListenerInterface
private $logger; private $logger;
private $userProviders; private $userProviders;
private $dispatcher; private $dispatcher;
private $registered;
public function __construct(SecurityContextInterface $context, array $userProviders, $contextKey, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null) public function __construct(SecurityContextInterface $context, array $userProviders, $contextKey, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null)
{ {
@ -65,8 +66,9 @@ class ContextListener implements ListenerInterface
*/ */
public function handle(GetResponseEvent $event) public function handle(GetResponseEvent $event)
{ {
if (null !== $this->dispatcher && HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) { if (!$this->registered && null !== $this->dispatcher && HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$this->dispatcher->addListener(KernelEvents::RESPONSE, array($this, 'onKernelResponse')); $this->dispatcher->addListener(KernelEvents::RESPONSE, array($this, 'onKernelResponse'));
$this->registered = true;
} }
$request = $event->getRequest(); $request = $event->getRequest();