Fix headers with empty value.
authorDmitriy Shalashov <skaurus@gmail.com>
Wed, 7 Jul 2010 16:43:39 +0000 (18:43 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 7 Jul 2010 16:46:24 +0000 (18:46 +0200)
lib/http.js
test/simple/test-http-blank-header.js [new file with mode: 0644]

index e3ebf75..1f3537b 100644 (file)
@@ -37,7 +37,7 @@ var parsers = new FreeList('parsers', 1000, function () {
 
   parser.onHeaderField = function (b, start, len) {
     var slice = b.toString('ascii', start, start+len).toLowerCase();
-    if (parser.value) {
+    if (parser.value != undefined) {
       parser.incoming._addHeaderLine(parser.field, parser.value);
       parser.field = null;
       parser.value = null;
@@ -59,7 +59,7 @@ var parsers = new FreeList('parsers', 1000, function () {
   };
 
   parser.onHeadersComplete = function (info) {
-    if (parser.field && parser.value) {
+    if (parser.field && (parser.value != undefined)) {
       parser.incoming._addHeaderLine(parser.field, parser.value);
     }
 
diff --git a/test/simple/test-http-blank-header.js b/test/simple/test-http-blank-header.js
new file mode 100644 (file)
index 0000000..1948dec
--- /dev/null
@@ -0,0 +1,47 @@
+require('../common');
+
+http = require('http');
+net = require('net');
+
+gotReq = false;
+
+server = http.createServer(function (req, res) {
+  error('got req');
+  gotReq = true;
+  assert.equal('GET', req.method);
+  assert.equal('/blah', req.url);
+  assert.deepEqual({
+    host: "mapdevel.trolologames.ru:443",
+    origin: "http://mapdevel.trolologames.ru",
+    cookie: "",
+  }, req.headers);
+});
+
+
+server.listen(PORT, function () {
+  var c = net.createConnection(PORT);
+
+  c.addListener('connect', function () {
+    error('client wrote message');
+    c.write( "GET /blah HTTP/1.1\r\n"
+           + "Host: mapdevel.trolologames.ru:443\r\n"
+           + "Cookie:\r\n"
+           + "Origin: http://mapdevel.trolologames.ru\r\n"
+           + "\r\n\r\nhello world"
+           );
+  });
+
+  c.addListener('end', function () {
+    c.end();
+  });
+
+  c.addListener('close', function () {
+    error('client close');
+    server.close();
+  });
+});
+
+
+process.addListener('exit', function () {
+  assert.ok(gotReq);
+});