diff --git a/src/lib/connectors/http.js b/src/lib/connectors/http.js index ae70fefb4..19d7eb03f 100644 --- a/src/lib/connectors/http.js +++ b/src/lib/connectors/http.js @@ -19,6 +19,7 @@ var qs = require('querystring'); var AgentKeepAlive = require('agentkeepalive'); var ConnectionAbstract = require('../connection'); var zlib = require('zlib'); +var INVALID_PATH_REGEX = /[^\u0021-\u00ff]/ /** * Connector used to talk to an elasticsearch node via HTTP @@ -166,6 +167,11 @@ HttpConnector.prototype.request = function (params, cb) { } }, this); + if (INVALID_PATH_REGEX.test(reqParams.path) === true) { + cb(new TypeError('ERR_UNESCAPED_CHARACTERS: ' + reqParams.path)) + return function () {} + } + request = this.hand.request(reqParams, function (_incoming) { incoming = _incoming; status = incoming.statusCode; diff --git a/test/unit/specs/http_connector.js b/test/unit/specs/http_connector.js index 22064e125..b947fa494 100644 --- a/test/unit/specs/http_connector.js +++ b/test/unit/specs/http_connector.js @@ -230,6 +230,17 @@ describe('Http Connector', function () { done(); }); }); + + it('calls back with error when http.request throws an error', function (done) { + var con = new HttpConnection(new Host('http://google.com/thisisinvalid\uffe2')); + + stub(con.log, 'error'); + + con.request({}, function (err) { + expect(err.message).to.eql('ERR_UNESCAPED_CHARACTERS: /thisisinvalid\uffe2'); + done(); + }); + }); }); describe('#request with incomming message error', function () {