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