mirror of
https://github.com/nodejs/node.git
synced 2025-04-30 23:56:58 +00:00

When emitting a 'connection' event on a httpServer, the function connectionListener is called. Then, a new parser is created, and 'consume' method is called on the socket's externalStream. However, if this stream was already consumed and unconsumed, the process crashes with a cpp assert from the 'Consume' method in stream_base.h. This commit makes sure that no SIGABRT will be raised and the process will stay alive (after emitting the socket). PR-URL: https://github.com/nodejs/node/pull/11015 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
23 lines
665 B
JavaScript
23 lines
665 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const http = require('http');
|
|
|
|
const testServer = http.createServer((req, res) => {
|
|
common.fail('Should not be called');
|
|
res.end();
|
|
});
|
|
testServer.on('connect', common.mustCall((req, socket, head) => {
|
|
socket.write('HTTP/1.1 200 Connection Established' + '\r\n' +
|
|
'Proxy-agent: Node-Proxy' + '\r\n' +
|
|
'\r\n');
|
|
// This shouldn't raise an assertion in StreamBase::Consume.
|
|
testServer.emit('connection', socket);
|
|
testServer.close();
|
|
}));
|
|
testServer.listen(0, common.mustCall(() => {
|
|
http.request({
|
|
port: testServer.address().port,
|
|
method: 'CONNECT'
|
|
}, (res) => {}).end();
|
|
}));
|