Merge pull request #40 from ratchetphp/response_verifier

Correct ResponseVerifier logic
This commit is contained in:
Chris Boden 2020-05-15 14:31:24 -04:00 committed by GitHub
commit c8651c7938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 7 deletions

View File

@ -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]);
}

View File

@ -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) {

View File

@ -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));
}
}