Added check to make sure writeHead() is called before write(), to prevent silent...
authorJed Schmidt <tr@nslator.jp>
Sun, 14 Mar 2010 03:36:45 +0000 (12:36 +0900)
committerRyan Dahl <ry@tinyclouds.org>
Sun, 14 Mar 2010 06:27:51 +0000 (22:27 -0800)
lib/http.js

index ca196bc..6b7d1f6 100644 (file)
@@ -110,6 +110,7 @@ function OutgoingMessage (connection) {
   this.use_chunked_encoding_by_default = true;
 
   this.flushing = false;
+  this.headWritten = false;
 
   this.finished = false;
 }
@@ -215,6 +216,10 @@ OutgoingMessage.prototype.sendBody = function () {
 
 
 OutgoingMessage.prototype.write = function (chunk, encoding) {
+  if ( (this instanceof ServerResponse) && !this.headWritten) {
+    throw new Error("writeHead() must be called before write()")
+  }
+
   encoding = encoding || "ascii";
   if (this.chunked_encoding) {
     this._send(process._byteLength(chunk, encoding).toString(16));
@@ -279,6 +284,7 @@ ServerResponse.prototype.writeHead = function (statusCode) {
   var status_line = "HTTP/1.1 " + statusCode.toString() + " "
                   + reasonPhrase + CRLF;
   this.sendHeaderLines(status_line, headers);
+  this.headWritten = true;
 };
 
 // TODO eventually remove sendHeader(), writeHeader()