mirror of https://github.com/lukechilds/node.git
Browse Source
Reset the underlying socket of an HTTP stream to be marked as unconsume after the HTTP parser no longer owns it. Fixes: https://github.com/nodejs/node/issues/14407 PR-URL: https://github.com/nodejs/node/pull/14410 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>v6
3 changed files with 35 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
if (!common.hasCrypto) |
||||
|
common.skip('missing crypto'); |
||||
|
|
||||
|
const tls = require('tls'); |
||||
|
const http = require('http'); |
||||
|
|
||||
|
// Tests that, after the HTTP parser stopped owning a socket that emits an
|
||||
|
// 'upgrade' event, another C++ stream can start owning it (e.g. a TLSSocket).
|
||||
|
|
||||
|
const server = http.createServer(common.mustNotCall()); |
||||
|
|
||||
|
server.on('upgrade', common.mustCall((request, socket, head) => { |
||||
|
// This should not crash.
|
||||
|
new tls.TLSSocket(socket); |
||||
|
server.close(); |
||||
|
socket.destroy(); |
||||
|
})); |
||||
|
|
||||
|
server.listen(0, common.mustCall(() => { |
||||
|
http.get({ |
||||
|
port: server.address().port, |
||||
|
headers: { |
||||
|
'Connection': 'Upgrade', |
||||
|
'Upgrade': 'websocket' |
||||
|
} |
||||
|
}).on('error', () => {}); |
||||
|
})); |
Loading…
Reference in new issue