Fix zero length buffer bug for http res.end()

Reported by Kadir Pekel <kadirpekel@gmail.com>
This commit is contained in:
Ryan Dahl 2010-09-30 17:12:56 -07:00
parent 1b24fc6678
commit 265cda97d7
2 changed files with 42 additions and 1 deletions

View File

@ -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('');
}

View File

@ -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);
});