From e26fcb2a34d756c615ab9f653ba9835bddd6a8d3 Mon Sep 17 00:00:00 2001 From: Georg Ringer <georg.ringer@gmail.com> Date: Thu, 12 Oct 2017 09:03:30 +0200 Subject: [PATCH] [BUGFIX] Use strict flag in signalslot dispatcher To avoid exceptions with complex structures, the strict flag must be used in the in_array check. Resolves: #82736 Releases: master, 8.7, 7.6 Change-Id: I3ecf859e3e3cc70ab40b10ef9052d46e8b486957 Reviewed-on: https://review.typo3.org/55189 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> --- typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php b/typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php index 5974bf773483..2bb14544fa7f 100644 --- a/typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php +++ b/typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php @@ -93,7 +93,9 @@ class Dispatcher implements \TYPO3\CMS\Core\SingletonInterface 'object' => $object, 'passSignalInformation' => $passSignalInformation === true ]; - if (!is_array($this->slots[$signalClassName][$signalName]) || !in_array($slot, $this->slots[$signalClassName][$signalName])) { + // The in_array() comparision needs to be strict to avoid potential issues + // with complex objects being registered as slot. + if (!is_array($this->slots[$signalClassName][$signalName]) || !in_array($slot, $this->slots[$signalClassName][$signalName], true)) { $this->slots[$signalClassName][$signalName][] = $slot; } } -- GitLab