diff --git a/src/Handshake/RequestVerifier.php b/src/Handshake/RequestVerifier.php index dbce9a9..9e192c5 100644 --- a/src/Handshake/RequestVerifier.php +++ b/src/Handshake/RequestVerifier.php @@ -119,10 +119,10 @@ class RequestVerifier { /** * Verify the version passed matches this RFC - * @param string|int $versionHeader MUST equal 13|"13" + * @param string[] $versionHeader MUST equal ["13"] * @return bool */ - public function verifyVersion($versionHeader) { + public function verifyVersion(array $versionHeader) { return (1 === count($versionHeader) && static::VERSION === (int)$versionHeader[0]); } 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)); } }