Skip to content

Commit b56ee1f

Browse files
committed
Fix SSL handshake error to be catchable
fixes #800
1 parent 1397f67 commit b56ee1f

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

Changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ you spot any mistakes.
1616
* Remove console.warn from PoolCluster #744
1717
* Fix `pool.end` to handle queued connections #797
1818
* Fix `pool.releaseConnection` to keep connection queue flowing #797
19+
* Fix SSL handshake error to be catchable #800
1920

2021
## v2.1.1 (2014-03-13)
2122

lib/protocol/sequences/Handshake.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,16 @@ Handshake.prototype['HandshakeInitializationPacket'] = function(packet) {
3535
var serverSSLSupport = packet.serverCapabilities1 & ClientConstants.CLIENT_SSL;
3636

3737
if (this._config.ssl) {
38-
if (!serverSSLSupport)
39-
throw new Error('Server does not support secure connnection');
38+
if (!serverSSLSupport) {
39+
var err = new Error('Server does not support secure connnection');
40+
41+
err.code = 'HANDSHAKE_NO_SSL_SUPPORT';
42+
err.fatal = true;
43+
44+
this.end(err);
45+
return;
46+
}
47+
4048
this._config.clientFlags |= ClientConstants.CLIENT_SSL;
4149
this.emit('packet', new Packets.SSLRequestPacket({
4250
clientFlags : this._config.clientFlags,
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({
4+
port : common.fakeServerPort,
5+
ssl : 'Amazon RDS'
6+
});
7+
8+
var server = common.createFakeServer();
9+
10+
var connectErr;
11+
server.listen(common.fakeServerPort, function(err) {
12+
if (err) throw err;
13+
14+
connection.connect(function(err) {
15+
connectErr = err;
16+
server.destroy();
17+
});
18+
});
19+
20+
server.on('connection', function(incomingConnection) {
21+
incomingConnection.handshake();
22+
});
23+
24+
process.on('exit', function() {
25+
assert.ok(connectErr);
26+
assert.equal(connectErr.code, 'HANDSHAKE_NO_SSL_SUPPORT');
27+
assert.ok(connectErr.fatal);
28+
});

0 commit comments

Comments
 (0)