diff options
author | Malte-Thorben Bruns <skenqbx@gmail.com> | 2015-05-22 21:12:59 +0200 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2015-05-22 21:30:22 +0200 |
commit | 2a71f02988244b6299db8fe8ba3cc0491793acfc (patch) | |
tree | ab902f89347410a9b6e429db2827d5af00e61a9d /test/parallel/test-tls-handshake-error.js | |
parent | 2bb2f06b3e53ca44687afdaa9b833e0b6181ff76 (diff) | |
download | android-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.tar.gz android-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.tar.bz2 android-node-v8-2a71f02988244b6299db8fe8ba3cc0491793acfc.zip |
tls: emit errors happening before handshake finish
This fixes a race condition introduced in 80342f6.
`socket.destroy(err)` only emits the passed error when
`socket._writableState.errorEmitted === false`, `ssl.onerror`
sets `errorEmitted = true` just before calling
`socket.destroy()`.
See: https://github.com/nodejs/io.js/issues/1119
See: https://github.com/nodejs/io.js/issues/1711
PR-URL: https://github.com/nodejs/io.js/pull/1769
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Diffstat (limited to 'test/parallel/test-tls-handshake-error.js')
-rw-r--r-- | test/parallel/test-tls-handshake-error.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/parallel/test-tls-handshake-error.js b/test/parallel/test-tls-handshake-error.js new file mode 100644 index 0000000000..dbe91d0943 --- /dev/null +++ b/test/parallel/test-tls-handshake-error.js @@ -0,0 +1,46 @@ +'use strict'; + +var assert = require('assert'); +var common = require('../common'); + +if (!common.hasCrypto) { + console.log('1..0 # Skipped: missing crypto'); + process.exit(); +} +var tls = require('tls'); + +var fs = require('fs'); +var net = require('net'); + +var errorCount = 0; +var closeCount = 0; + +var server = tls.createServer({ + key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), + cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'), + rejectUnauthorized: true +}, function(c) { +}).listen(common.PORT, function() { + var c = tls.connect({ + port: common.PORT, + ciphers: 'RC4' + }, function() { + assert(false, 'should not be called'); + }); + + c.on('error', function(err) { + errorCount++; + assert.notEqual(err.code, 'ECONNRESET'); + }); + + c.on('close', function(err) { + if (err) + closeCount++; + server.close(); + }); +}); + +process.on('exit', function() { + assert.equal(errorCount, 1); + assert.equal(closeCount, 1); +}); |