Skip to content

Commit 963f5e8

Browse files
committed
tls: do not hang without newSession handler
When listening for client hello parser events (like OCSP requests), do not hang if `newSession` event handler is not present. fix nodejs/node-v0.x-archive#8660 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> PR-URL: node-forward/node#47
1 parent f8076c4 commit 963f5e8

3 files changed

Lines changed: 31 additions & 11 deletions

File tree

lib/_tls_legacy.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,14 +655,17 @@ function onnewsession(key, session) {
655655
var self = this;
656656
var once = false;
657657

658-
self.server.emit('newSession', key, session, function() {
658+
if (!self.server.emit('newSession', key, session, done))
659+
done();
660+
661+
function done() {
659662
if (once)
660663
return;
661664
once = true;
662665

663666
if (self.ssl)
664667
self.ssl.newSessionDone();
665-
});
668+
};
666669
}
667670

668671

lib/_tls_wrap.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,10 @@ function onnewsession(key, session) {
200200
var once = false;
201201

202202
this._newSessionPending = true;
203-
this.server.emit('newSession', key, session, function() {
203+
if (!this.server.emit('newSession', key, session, done))
204+
done();
205+
206+
function done() {
204207
if (once)
205208
return;
206209
once = true;
@@ -211,7 +214,7 @@ function onnewsession(key, session) {
211214
if (self._securePending)
212215
self._finishInit();
213216
self._securePending = false;
214-
});
217+
}
215218
}
216219

217220

test/simple/test-tls-ocsp-callback.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,19 @@ if (!common.opensslCli) {
3131
process.exit(0);
3232
}
3333

34+
var assert = require('assert');
35+
var tls = require('tls');
36+
var constants = require('constants');
37+
var fs = require('fs');
38+
var join = require('path').join;
39+
3440
test({ response: false }, function() {
35-
test({ response: 'hello world' });
41+
test({ response: 'hello world' }, function() {
42+
test({ ocsp: false });
43+
});
3644
});
3745

3846
function test(testOptions, cb) {
39-
var assert = require('assert');
40-
var tls = require('tls');
41-
var fs = require('fs');
42-
var join = require('path').join;
43-
var spawn = require('child_process').spawn;
4447

4548
var keyFile = join(common.fixturesDir, 'keys', 'agent1-key.pem');
4649
var certFile = join(common.fixturesDir, 'keys', 'agent1-cert.pem');
@@ -54,6 +57,7 @@ function test(testOptions, cb) {
5457
ca: [ca]
5558
};
5659
var requestCount = 0;
60+
var clientSecure = 0;
5761
var ocspCount = 0;
5862
var ocspResponse;
5963
var session;
@@ -83,9 +87,12 @@ function test(testOptions, cb) {
8387
server.listen(common.PORT, function() {
8488
var client = tls.connect({
8589
port: common.PORT,
86-
requestOCSP: true,
90+
requestOCSP: testOptions.ocsp !== false,
91+
secureOptions: testOptions.ocsp === false ?
92+
constants.SSL_OP_NO_TICKET : 0,
8793
rejectUnauthorized: false
8894
}, function() {
95+
clientSecure++;
8996
});
9097
client.on('OCSPResponse', function(resp) {
9198
ocspResponse = resp;
@@ -98,12 +105,19 @@ function test(testOptions, cb) {
98105
});
99106

100107
process.on('exit', function() {
108+
if (testOptions.ocsp === false) {
109+
assert.equal(requestCount, clientSecure);
110+
assert.equal(requestCount, 1);
111+
return;
112+
}
113+
101114
if (testOptions.response) {
102115
assert.equal(ocspResponse.toString(), testOptions.response);
103116
} else {
104117
assert.ok(ocspResponse === null);
105118
}
106119
assert.equal(requestCount, testOptions.response ? 0 : 1);
120+
assert.equal(clientSecure, requestCount);
107121
assert.equal(ocspCount, 1);
108122
});
109123
}

0 commit comments

Comments
 (0)