diff --git a/lib/http.js b/lib/http.js index d7ccc260f14..310c533ea14 100755 --- a/lib/http.js +++ b/lib/http.js @@ -560,7 +560,7 @@ OutgoingMessage.prototype.end = function (data, encoding) { if (!hot) { if (this.chunkedEncoding) { ret = this._send('0\r\n' + this._trailer + '\r\n'); // Last chunk. - } else if (!data) { + } else { // Force a flush, HACK. ret = this._send(''); } diff --git a/test/simple/test-zerolengthbufferbug.js b/test/simple/test-zerolengthbufferbug.js new file mode 100644 index 00000000000..f5cc85c7083 --- /dev/null +++ b/test/simple/test-zerolengthbufferbug.js @@ -0,0 +1,41 @@ +// Serving up a zero-length buffer should work. + +var common = require("../common"); +var assert = common.assert; +var http = require('http'); + +var server = http.createServer(function (req, res) { + var buffer = new Buffer(0); + res.writeHead(200, {'Content-Type': 'text/html', + 'Content-Length': buffer.length}); + res.end(buffer); +}); + +var gotResponse = false; +var resBodySize = 0; + +server.listen(common.PORT, function () { + var client = http.createClient(common.PORT); + + var req = client.request('GET', '/'); + req.end(); + + req.on('response', function (res) { + gotResponse = true; + + res.on('data', function (d) { + resBodySize += d.length; + }); + + res.on('end', function (d) { + server.close(); + }); + }); +}); + +process.on('exit', function () { + assert.ok(gotResponse); + assert.equal(0, resBodySize); +}); + +