https: fix ssl socket leak when keepalive is used
authorAlexander Penev <alexander.penev@sap.com>
Mon, 14 Mar 2016 15:56:02 +0000 (17:56 +0200)
committerMyles Borins <mborins@us.ibm.com>
Wed, 30 Mar 2016 20:12:15 +0000 (13:12 -0700)
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 <benjamingr@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
lib/_http_agent.js

index ddb1c5b..aac4b95 100644 (file)
@@ -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] = [];