Skip to content

Commit c13ba54

Browse files
jsvennevid-eajsvennevid
authored andcommitted
Hardened websocket entrypoints to not cause exceptions on badly formatted requests
1 parent f617bae commit c13ba54

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

lib/streaming.io.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
var client = require('streaming.io-client'),
22
Registry = require('./registry'),
33
compress = require('./compress').compress,
4-
debug = require('debug')('streaming.io:server');
4+
debug = require('debug')('streaming.io:server'),
5+
assert = require('assert'),
6+
_ = require('underscore');
57

68
exports = module.exports = Streaming;
79

@@ -16,6 +18,16 @@ var registry;
1618
function setupIo(io, service) {
1719
io.on('connection', function (socket) {
1820
socket.on('stream', function (message, callback) {
21+
try {
22+
assert(_.isObject(message), "message is not an object");
23+
assert(_.isString(message.url), "url not a string");
24+
assert(_.isFunction(callback), "no callback provided");
25+
} catch (e) {
26+
debug("socket(%s) - invalid stream message: %s", socket.id, e.message);
27+
_.isFunction(callback) && callback("Invalid request");
28+
return;
29+
}
30+
1931
debug("socket(%s) - streaming '%s'", socket.id, message.url);
2032

2133
var readMessage = {
@@ -38,11 +50,30 @@ function setupIo(io, service) {
3850
});
3951

4052
socket.on('unstream', function (message, callback) {
53+
try {
54+
assert(_.isObject(message), "message is not an object");
55+
assert(_.isString(message.url), "url not a string");
56+
assert(_.isFunction(callback), "no callback provided");
57+
} catch (e) {
58+
debug("socket(%s) - invalid unstream message: %s", socket.id, e.message);
59+
_.isFunction(callback) && callback("Invalid request");
60+
return;
61+
}
62+
4163
registry.removeSubscription(socket, message.url);
4264
callback(null);
4365
});
4466

4567
socket.on('sync', function (message, callback) {
68+
try {
69+
assert(_.isObject(message), "message is not an object");
70+
assert(_.isFunction(callback), "no callback provided");
71+
} catch (e) {
72+
debug("socket(%s) - invalid sync message: %s", socket.id, e.message);
73+
_.isFunction(callback) && callback("Invalid request");
74+
return;
75+
}
76+
4677
debug("socket(%s) - op '%s' : %s", socket.id, message.method, message.url);
4778
service.sync(socket, message, function (err, response) {
4879
if (err) {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "streaming.io",
3-
"version": "0.3.8",
3+
"version": "0.3.9",
44

55
"repository": {
66
"type": "git",

0 commit comments

Comments
 (0)