From 81876612f756f76b04e8a4212113e2e226b91375 Mon Sep 17 00:00:00 2001 From: Alexander Penev Date: Mon, 14 Mar 2016 17:56:02 +0200 Subject: [PATCH] https: fix ssl socket leak when keepalive is used MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SSL sockets leak whenever keep alive is enabled, ca option is set in the global agent, and requests are sent without the ca property. In the following case at Agent.prototype.createSocket a socket will be created with a hashtag name that includes data from the global agents’ ca property. On subsequent requests at Agent.prototype.addRequest we do not find the free socket, because the hashtag name generated there does not take into account the global agents’ ca property, thus creating a new socket and leaving the first socket to timeout. closes: #5699 PR-URL: https://github.com/nodejs/node/pull/5713 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- lib/_http_agent.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/_http_agent.js b/lib/_http_agent.js index ddb1c5bfff9b63..aac4b955637e9a 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -115,6 +115,9 @@ Agent.prototype.addRequest = function(req, options) { }; } + options = util._extend({}, options); + options = util._extend(options, this.options); + var name = this.getName(options); if (!this.sockets[name]) { this.sockets[name] = [];