Skip to content

Commit

Permalink
Merge branch 'fix-ratchetphp#516'
Browse files Browse the repository at this point in the history
  • Loading branch information
cboden committed Dec 12, 2017
2 parents a4917ed + d52de66 commit 5b5795c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 29 deletions.
14 changes: 9 additions & 5 deletions src/Ratchet/Wamp/ServerProtocol.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ public function getSubProtocols() {
$subs[] = 'wamp';

return $subs;
} else {
return array('wamp');
}

return ['wamp'];
}

/**
Expand Down Expand Up @@ -93,6 +93,10 @@ public function onMessage(ConnectionInterface $from, $msg) {
throw new Exception("Invalid WAMP message format");
}

if (isset($json[1]) && !(is_string($json[1]) || is_numeric($json[1]))) {
throw new Exception('Invalid Topic, must be a string');
}

switch ($json[0]) {
case static::MSG_PREFIX:
$from->WAMP->prefixes[$json[1]] = $json[2];
Expand Down Expand Up @@ -122,13 +126,13 @@ public function onMessage(ConnectionInterface $from, $msg) {
$exclude = (array_key_exists(3, $json) ? $json[3] : null);
if (!is_array($exclude)) {
if (true === (boolean)$exclude) {
$exclude = array($from->WAMP->sessionId);
$exclude = [$from->WAMP->sessionId];
} else {
$exclude = array();
$exclude = [];
}
}

$eligible = (array_key_exists(4, $json) ? $json[4] : array());
$eligible = (array_key_exists(4, $json) ? $json[4] : []);

$this->_decorating->onPublish($from, $from->getUri($json[1]), $json[2], $exclude, $eligible);
break;
Expand Down
75 changes: 51 additions & 24 deletions tests/unit/Wamp/ServerProtocolTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
use Ratchet\Mock\WampComponent as TestComponent;

/**
* @covers Ratchet\Wamp\ServerProtocol
* @covers Ratchet\Wamp\WampServerInterface
* @covers Ratchet\Wamp\WampConnection
* @covers \Ratchet\Wamp\ServerProtocol
* @covers \Ratchet\Wamp\WampServerInterface
* @covers \Ratchet\Wamp\WampConnection
*/
class ServerProtocolTest extends \PHPUnit_Framework_TestCase {
protected $_comp;
Expand All @@ -23,13 +23,13 @@ protected function newConn() {
}

public function invalidMessageProvider() {
return array(
array(0)
, array(3)
, array(4)
, array(8)
, array(9)
);
return [
[0]
, [3]
, [4]
, [8]
, [9]
];
}

/**
Expand All @@ -40,7 +40,7 @@ public function testInvalidMessages($type) {

$conn = $this->newConn();
$this->_comp->onOpen($conn);
$this->_comp->onMessage($conn, json_encode(array($type)));
$this->_comp->onMessage($conn, json_encode([$type]));
}

public function testWelcomeMessage() {
Expand Down Expand Up @@ -82,16 +82,16 @@ public function testUnSubscribe() {
}

public function callProvider() {
return array(
array(2, 'a', 'b')
, array(2, array('a', 'b'))
, array(1, 'one')
, array(3, 'one', 'two', 'three')
, array(3, array('un', 'deux', 'trois'))
, array(2, 'hi', array('hello', 'world'))
, array(2, array('hello', 'world'), 'hi')
, array(2, array('hello' => 'world', 'herp' => 'derp'))
);
return [
[2, 'a', 'b']
, [2, ['a', 'b']]
, [1, 'one']
, [3, 'one', 'two', 'three']
, [3, ['un', 'deux', 'trois']]
, [2, 'hi', ['hello', 'world']]
, [2, ['hello', 'world'], 'hi']
, [2, ['hello' => 'world', 'herp' => 'derp']]
];
}

/**
Expand All @@ -102,7 +102,7 @@ public function testCall() {
$paramNum = array_shift($args);

$uri = 'http://example.com/endpoint/' . rand(1, 100);
$id = uniqid();
$id = uniqid('', false);
$clientMessage = array_merge(array(2, $id, $uri), $args);

$conn = $this->newConn();
Expand Down Expand Up @@ -145,8 +145,8 @@ public function testPublishAndExcludeMe() {
public function testPublishAndEligible() {
$conn = $this->newConn();

$buddy = uniqid();
$friend = uniqid();
$buddy = uniqid('', false);
$friend = uniqid('', false);

$this->_comp->onOpen($conn);
$this->_comp->onMessage($conn, json_encode(array(7, 'topic', 'event', false, array($buddy, $friend))));
Expand Down Expand Up @@ -265,4 +265,31 @@ public function testValidJsonButInvalidProtocol($message) {
$this->_comp->onOpen($conn);
$this->_comp->onMessage($conn, $message);
}

public function testBadClientInputFromNonStringTopic() {
$this->setExpectedException('\Ratchet\Wamp\Exception');

$conn = new WampConnection($this->newConn());
$this->_comp->onOpen($conn);

$this->_comp->onMessage($conn, json_encode([5, ['hells', 'nope']]));
}

public function testBadPrefixWithNonStringTopic() {
$this->setExpectedException('\Ratchet\Wamp\Exception');

$conn = new WampConnection($this->newConn());
$this->_comp->onOpen($conn);

$this->_comp->onMessage($conn, json_encode([1, ['hells', 'nope'], ['bad', 'input']]));
}

public function testBadPublishWithNonStringTopic() {
$this->setExpectedException('\Ratchet\Wamp\Exception');

$conn = new WampConnection($this->newConn());
$this->_comp->onOpen($conn);

$this->_comp->onMessage($conn, json_encode([7, ['bad', 'input'], 'Hider']));
}
}

0 comments on commit 5b5795c

Please sign in to comment.