mirror of https://github.com/lukechilds/node.git
Browse Source
TLSWrap object keeps a pointer reference to the underlying TCPWrap object. This TCPWrap object could be closed and deleted by the event-loop which leaves us with a dangling pointer. So the TLSWrap object needs to track the "close" event on the TCPWrap object. PR-URL: https://github.com/nodejs/node/pull/11776 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net>v6
jBarz
8 years ago
committed by
James M Snell
4 changed files with 60 additions and 1 deletions
@ -0,0 +1,43 @@ |
|||
'use strict'; |
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
|
|||
const tls = require('tls'); |
|||
const fs = require('fs'); |
|||
const net = require('net'); |
|||
|
|||
const key = fs.readFileSync(common.fixturesDir + '/keys/agent2-key.pem'); |
|||
const cert = fs.readFileSync(common.fixturesDir + '/keys/agent2-cert.pem'); |
|||
|
|||
const T = 100; |
|||
|
|||
// tls server
|
|||
const tlsServer = tls.createServer({ cert, key }, (socket) => { |
|||
setTimeout(() => { |
|||
socket.on('error', (error) => { |
|||
assert.strictEqual(error.code, 'EINVAL'); |
|||
tlsServer.close(); |
|||
netServer.close(); |
|||
}); |
|||
socket.write('bar'); |
|||
}, T * 2); |
|||
}); |
|||
|
|||
// plain tcp server
|
|||
const netServer = net.createServer((socket) => { |
|||
// if client wants to use tls
|
|||
tlsServer.emit('connection', socket); |
|||
|
|||
socket.setTimeout(T, () => { |
|||
// this breaks if TLSSocket is already managing the socket:
|
|||
socket.destroy(); |
|||
}); |
|||
}).listen(0, common.mustCall(function() { |
|||
|
|||
// connect client
|
|||
tls.connect({ |
|||
host: 'localhost', |
|||
port: this.address().port, |
|||
rejectUnauthorized: false |
|||
}).write('foo'); |
|||
})); |
Loading…
Reference in new issue