From d9df3419ba2f04da9a2ad7c68122f8f9f46580bf Mon Sep 17 00:00:00 2001 From: Matt Bonneau Date: Thu, 14 May 2020 10:56:29 -0400 Subject: [PATCH] Correct ResponseVerifier logic replaces #39 --- src/Handshake/ResponseVerifier.php | 8 +++++++- tests/unit/Handshake/ResponseVerifierTest.php | 10 ++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Handshake/ResponseVerifier.php b/src/Handshake/ResponseVerifier.php index 38904e8..453f9d6 100644 --- a/src/Handshake/ResponseVerifier.php +++ b/src/Handshake/ResponseVerifier.php @@ -51,7 +51,13 @@ class ResponseVerifier { } public function verifySubProtocol(array $requestHeader, array $responseHeader) { - return 0 === count($responseHeader) || count(array_intersect($responseHeader, $requestHeader)) > 0; + if (0 === count($responseHeader)) { + return true; + } + + $requestedProtocols = array_map('trim', explode(',', implode(',', $requestHeader))); + + return count($responseHeader) === 1 && count(array_intersect($responseHeader, $requestedProtocols)) === 1; } public function verifyExtensions(array $requestHeader, array $responseHeader) { diff --git a/tests/unit/Handshake/ResponseVerifierTest.php b/tests/unit/Handshake/ResponseVerifierTest.php index 0ca18e3..9a1459b 100644 --- a/tests/unit/Handshake/ResponseVerifierTest.php +++ b/tests/unit/Handshake/ResponseVerifierTest.php @@ -21,17 +21,19 @@ class ResponseVerifierTest extends TestCase { public static function subProtocolsProvider() { return [ [true, ['a'], ['a']] - , [true, ['b', 'a'], ['c', 'd', 'a']] - , [false, ['a', 'b', 'c'], ['d']] + , [true, ['c', 'd', 'a'], ['a']] + , [true, ['c, a', 'd'], ['a']] , [true, [], []] , [true, ['a', 'b'], []] + , [false, ['c', 'd', 'a'], ['b', 'a']] + , [false, ['a', 'b', 'c'], ['d']] ]; } /** * @dataProvider subProtocolsProvider */ - public function testVerifySubProtocol($expected, $response, $request) { - $this->assertEquals($expected, $this->_v->verifySubProtocol($response, $request)); + public function testVerifySubProtocol($expected, $request, $response) { + $this->assertEquals($expected, $this->_v->verifySubProtocol($request, $response)); } }