diff --git a/lib/http.js b/lib/http.js index 28601d061c4a..1287a14a3dac 100644 --- a/lib/http.js +++ b/lib/http.js @@ -1484,7 +1484,9 @@ function socketOnData(d, start, end) { parser.finish(); // This is start + byteParsed - var bodyHead = d.slice(start + bytesParsed, end); + //Apps that hang on to bodyHead can lead to large slab buffer retention + var bodyHead = new Buffer(end - start - bytesParsed); + d.copy(bodyHead,0,start + bytesParsed, end); var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade'; if (req.listeners(eventName).length) { @@ -1834,7 +1836,9 @@ function connectionListener(socket) { freeParser(parser, req); // This is start + byteParsed - var bodyHead = d.slice(start + bytesParsed, end); + //Apps that hang on to bodyHead can lead to large slab buffer retention + var bodyHead = new Buffer(end - start - bytesParsed); + d.copy(bodyHead,0,start + bytesParsed, end); var eventName = req.method === 'CONNECT' ? 'connect' : 'upgrade'; if (self.listeners(eventName).length) {