Fix zero length buffer bug for http res.end()
authorRyan Dahl <ry@tinyclouds.org>
Fri, 1 Oct 2010 00:12:56 +0000 (17:12 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Fri, 1 Oct 2010 00:13:01 +0000 (17:13 -0700)
Reported by Kadir Pekel <kadirpekel@gmail.com>

lib/http.js
test/simple/test-zerolengthbufferbug.js [new file with mode: 0644]

index d7ccc260f147b6e3609cd3d3161f28fc7a727872..310c533ea14299cf9b10836910fb8f859eacf648 100755 (executable)
@@ -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 (file)
index 0000000..f5cc85c
--- /dev/null
@@ -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);
+});
+
+