mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
9b7a6914a7
Currently the writable side of the socket is closed as soon as `UV_EOF` is read regardless of the state of the socket. This allows the handle to be closed before `'end'` is emitted and thus `'close'` can be emitted before `'end'` if the socket is paused. This commit prevents the handle from being closed until `'end'` is emitted ensuring the correct order of events. PR-URL: https://github.com/nodejs/node/pull/19241 Fixes: https://github.com/nodejs/node/issues/19166 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
43 lines
1004 B
JavaScript
43 lines
1004 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
const fixtures = require('../common/fixtures');
|
|
|
|
// This test ensures that Node.js doesn't incur a segfault while accessing
|
|
// TLSWrap fields after the parent handle was destroyed.
|
|
// https://github.com/nodejs/node/issues/5108
|
|
|
|
const assert = require('assert');
|
|
const tls = require('tls');
|
|
|
|
const options = {
|
|
key: fixtures.readKey('agent1-key.pem'),
|
|
cert: fixtures.readKey('agent1-cert.pem')
|
|
};
|
|
|
|
const server = tls.createServer(options, function(s) {
|
|
s.end('hello');
|
|
}).listen(0, function() {
|
|
const opts = {
|
|
port: this.address().port,
|
|
rejectUnauthorized: false
|
|
};
|
|
const client = tls.connect(opts, function() {
|
|
putImmediate(client);
|
|
});
|
|
client.resume();
|
|
});
|
|
|
|
function putImmediate(client) {
|
|
setImmediate(function() {
|
|
if (client.ssl) {
|
|
const fd = client.ssl.fd;
|
|
assert(!!fd);
|
|
putImmediate(client);
|
|
} else {
|
|
server.close();
|
|
}
|
|
});
|
|
}
|