mirror of https://github.com/lukechilds/node.git
Browse Source
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>v6
Roee Kasher
8 years ago
committed by
James M Snell
2 changed files with 25 additions and 1 deletions
@ -0,0 +1,22 @@ |
|||
'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(); |
|||
})); |
Loading…
Reference in new issue