From dbe6b14fc773c5b288ac919b84a902be28306a93 Mon Sep 17 00:00:00 2001 From: 021-projects Date: Wed, 22 Jan 2025 18:42:50 +0200 Subject: [PATCH] fix(broadcaster): incorrect channel matching because of dot in pattern (#54303) * fix(broadcaster): incorrect channel matching because of dot in pattern * refactor(broadcaster): update according to styleci --- .../Broadcasting/Broadcasters/Broadcaster.php | 2 ++ .../UsePusherChannelsNamesTest.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php index 5abccd59bafb..eb21f2c0662f 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php @@ -372,6 +372,8 @@ protected function retrieveChannelOptions($channel) */ protected function channelNameMatchesPattern($channel, $pattern) { + $pattern = str_replace('.', '\.', $pattern); + return preg_match('/^'.preg_replace('/\{(.*?)\}/', '([^\.]+)', $pattern).'$/', $channel); } diff --git a/tests/Broadcasting/UsePusherChannelsNamesTest.php b/tests/Broadcasting/UsePusherChannelsNamesTest.php index 122e83e8c3f4..d1ea01ed727e 100644 --- a/tests/Broadcasting/UsePusherChannelsNamesTest.php +++ b/tests/Broadcasting/UsePusherChannelsNamesTest.php @@ -30,6 +30,19 @@ public function testChannelNameNormalizationSpecialCase() ); } + public function testChannelNamePatternMatching() + { + $broadcaster = new FakeBroadcasterUsingPusherChannelsNames; + + $this->assertEquals( + 0, + $broadcaster->testChannelNameMatchesPattern( + 'TestChannel', + 'Test.{id}' + ) + ); + } + #[DataProvider('channelsProvider')] public function testIsGuardedChannel($requestChannelName, $_, $guarded) { @@ -103,4 +116,9 @@ public function broadcast(array $channels, $event, array $payload = []) { // } + + public function testChannelNameMatchesPattern($channel, $pattern) + { + return $this->channelNameMatchesPattern($channel, $pattern); + } }