tls: catch certCbDone
exceptions
Catch and emit `certCbDone` exceptions instead of throwing them as `uncaughtException` and crashing the whole process. Fix: https://github.com/nodejs/node/issues/6822 PR-URL: https://github.com/nodejs/node/pull/6887 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
c9a5990a76
commit
9cac8c894e
@ -171,7 +171,11 @@ function oncertcb(info) {
|
||||
if (!self._handle)
|
||||
return self.destroy(new Error('Socket is closed'));
|
||||
|
||||
self._handle.certCbDone();
|
||||
try {
|
||||
self._handle.certCbDone();
|
||||
} catch (e) {
|
||||
self.destroy(e);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
42
test/parallel/test-tls-empty-sni-context.js
Normal file
42
test/parallel/test-tls-empty-sni-context.js
Normal file
@ -0,0 +1,42 @@
|
||||
'use strict';
|
||||
|
||||
if (!process.features.tls_sni) {
|
||||
console.log('1..0 # Skipped: node compiled without OpenSSL or ' +
|
||||
'with old OpenSSL version.');
|
||||
return;
|
||||
}
|
||||
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
|
||||
if (!common.hasCrypto) {
|
||||
console.log('1..0 # Skipped: missing crypto');
|
||||
return;
|
||||
}
|
||||
|
||||
const tls = require('tls');
|
||||
|
||||
const options = {
|
||||
SNICallback: (name, callback) => {
|
||||
callback(null, tls.createSecureContext());
|
||||
}
|
||||
};
|
||||
|
||||
const server = tls.createServer(options, (c) => {
|
||||
common.fail('Should not be called');
|
||||
}).on('tlsClientError', common.mustCall((err, c) => {
|
||||
assert(/SSL_use_certificate:passed a null parameter/i.test(err.message));
|
||||
server.close();
|
||||
})).listen(common.PORT, common.mustCall(() => {
|
||||
const c = tls.connect({
|
||||
port: common.PORT,
|
||||
rejectUnauthorized: false,
|
||||
servername: 'any.name'
|
||||
}, () => {
|
||||
common.fail('Should not be called');
|
||||
});
|
||||
|
||||
c.on('error', common.mustCall((err) => {
|
||||
assert(/socket hang up/.test(err.message));
|
||||
}));
|
||||
}));
|
Loading…
x
Reference in New Issue
Block a user