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)
|
if (!self._handle)
|
||||||
return self.destroy(new Error('Socket is closed'));
|
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