From 4b75668511e690c1a7598ae98c2dd7f209d13a35 Mon Sep 17 00:00:00 2001 From: mgc Date: Sat, 4 Sep 2010 04:50:44 -0400 Subject: [PATCH] Failing to pass an origin header would throw an exception and crash the server. Added some handling. --- lib/socket.io/client.js | 18 +++++++++++++----- lib/socket.io/transports/websocket.js | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/socket.io/client.js b/lib/socket.io/client.js index 43fb5acf61..fa470fe7c5 100644 --- a/lib/socket.io/client.js +++ b/lib/socket.io/client.js @@ -169,11 +169,19 @@ Client.prototype._generateSessionId = function(){ }; Client.prototype._verifyOrigin = function(origin){ - var parts = urlparse(origin), origins = this.listener.options.origins; - return origins.indexOf('*:*') !== -1 || - origins.indexOf(parts.host + ':' + parts.port) !== -1 || - origins.indexOf(parts.host + ':*') !== -1 || - origins.indexOf('*:' + parts.port) !== -1; + var origins = this.listener.options.origins; + if (origins.indexOf('*:*') !== -1) { + return true; + } + if (origin) { + try { + var parts = urlparse(origin); + return origins.indexOf(parts.host + ':' + parts.port) !== -1 || + origins.indexOf(parts.host + ':*') !== -1 || + origins.indexOf('*:' + parts.port) !== -1; + } catch (ex) {} + } + return false; }; for (var i in options) Client.prototype[i] = options[i]; diff --git a/lib/socket.io/transports/websocket.js b/lib/socket.io/transports/websocket.js index 1edaf00a4e..cd52142841 100644 --- a/lib/socket.io/transports/websocket.js +++ b/lib/socket.io/transports/websocket.js @@ -39,7 +39,7 @@ WebSocket.prototype._onConnect = function(req, socket){ } var origin = this.request.headers.origin, - location = (origin.substr(0, 5) == 'https' ? 'wss' : 'ws') + location = (origin && origin.substr(0, 5) == 'https' ? 'wss' : 'ws') + '://' + this.request.headers.host + this.request.url; if (this.draft == 76){