From 1c7778d71c6bee5ca03d100d315ecd6b1eaf7194 Mon Sep 17 00:00:00 2001 From: Brendan Ashworth Date: Sat, 18 Apr 2015 12:22:31 -0700 Subject: [PATCH] http: revert 06cfff93, fixes overridden options This commit reverts commit 06cfff93 and adds a test that failed before the revert. Options is in fact overridden in the code below the util._extend() call (specifically options.port and options.host) to allow for a one-argument net.createConnection(options) call. --- lib/_http_client.js | 2 + .../test-http-dont-override-options.js | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 test/parallel/test-http-dont-override-options.js diff --git a/lib/_http_client.js b/lib/_http_client.js index daa37ef064e3fc..200a08e5d5bf85 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -21,6 +21,8 @@ function ClientRequest(options, cb) { if (typeof options === 'string') { options = url.parse(options); + } else { + options = util._extend({}, options); } var agent = options.agent; diff --git a/test/parallel/test-http-dont-override-options.js b/test/parallel/test-http-dont-override-options.js new file mode 100644 index 00000000000000..e9f3beaf3e9da2 --- /dev/null +++ b/test/parallel/test-http-dont-override-options.js @@ -0,0 +1,43 @@ +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +var requests = 0; + +http.createServer(function(req, res) { + res.writeHead(200); + res.end('ok'); + + requests++; +}).listen(common.PORT).unref(); + +var agent = new http.Agent(); +agent.defaultPort = common.PORT; + +// options marked as explicitly undefined for readability +// in this test, they should STAY undefined as options should not +// be mutable / modified +var options = { + host: undefined, + hostname: 'localhost', + port: undefined, + defaultPort: undefined, + path: undefined, + method: undefined, + agent: agent +}; + +http.request(options, function(res) { + res.resume(); +}).end(); + +process.on('exit', function() { + assert.equal(requests, 1); + + assert.strictEqual(options.host, undefined); + assert.strictEqual(options.hostname, 'localhost'); + assert.strictEqual(options.port, undefined); + assert.strictEqual(options.defaultPort, undefined); + assert.strictEqual(options.path, undefined); + assert.strictEqual(options.method, undefined); +});