From 87f3db780e9a381565593be596b03bb3d96e6ca6 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 8 Feb 2013 14:08:13 +0100 Subject: [PATCH 1/2] [EventDispathcer] Fix removeListener --- .../EventDispatcher/EventDispatcher.php | 2 +- .../EventDispatcher/EventDispatcherTest.php | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/EventDispatcher/EventDispatcher.php b/src/Symfony/Component/EventDispatcher/EventDispatcher.php index f6e4d0a070..f2d35c5074 100644 --- a/src/Symfony/Component/EventDispatcher/EventDispatcher.php +++ b/src/Symfony/Component/EventDispatcher/EventDispatcher.php @@ -100,7 +100,7 @@ class EventDispatcher implements EventDispatcherInterface } foreach ($this->listeners[$eventName] as $priority => $listeners) { - if (false !== ($key = array_search($listener, $listeners))) { + if (false !== ($key = array_search($listener, $listeners, true))) { unset($this->listeners[$eventName][$priority][$key], $this->sorted[$eventName]); } } diff --git a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php index 62cd9e5193..7311c6bc8f 100644 --- a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php +++ b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php @@ -207,6 +207,28 @@ class EventDispatcherTest extends \PHPUnit_Framework_TestCase $this->dispatcher->removeSubscriber($eventSubscriber); $this->assertFalse($this->dispatcher->hasListeners(self::preFoo)); } + + /** + * @see https://bugs.php.net/bug.php?id=62976 + * + * This bug affects: + * - The PHP 5.3 branch for versions < 5.3.18 + * - The PHP 5.4 branch for versions < 5.4.8 + * - The PHP 5.5 branch is not affected + */ + public function testWorkaroundForPhpBug62976() + { + $dispatcher = new EventDispatcher(); + $dispatcher->addListener('bug.62976', new CallableClass()); + $dispatcher->removeListener('bug.62976', function() {}); + } +} + +class CallableClass +{ + public function __invoke() + { + } } class TestEventListener From 4ce9ac3a279143ce9aa8bf2a33076ff271593cdf Mon Sep 17 00:00:00 2001 From: Jakub Zalas Date: Sun, 10 Feb 2013 12:26:00 +0100 Subject: [PATCH 2/2] [EventDispatcher] Added assertion. --- .../Tests/Component/EventDispatcher/EventDispatcherTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php index 7311c6bc8f..0ffde515c9 100644 --- a/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php +++ b/tests/Symfony/Tests/Component/EventDispatcher/EventDispatcherTest.php @@ -221,6 +221,7 @@ class EventDispatcherTest extends \PHPUnit_Framework_TestCase $dispatcher = new EventDispatcher(); $dispatcher->addListener('bug.62976', new CallableClass()); $dispatcher->removeListener('bug.62976', function() {}); + $this->assertTrue($dispatcher->hasListeners('bug.62976')); } }