]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Author: Unknown
authorAmos Jeffries <squid3@treenet.co.nz>
Sun, 21 Mar 2010 14:54:03 +0000 (03:54 +1300)
committerAmos Jeffries <squid3@treenet.co.nz>
Sun, 21 Mar 2010 14:54:03 +0000 (03:54 +1300)
Bug 2879: 3.0 regression in headers end finding

Ported from Squid-2.

src/http.cc

index e00332cb5a73dd4bf3191bfd6703dbdd8ea81c36..d093aee47edd73391e5da5c17347488e359ea168 100644 (file)
@@ -1122,6 +1122,23 @@ HttpStateData::readReply(const CommIoCbParams &io)
     if (len == 0) { // reached EOF?
         eof = 1;
         flags.do_next_read = 0;
+
+        /* Bug 2789: Replies may terminate with \r\n then EOF instead of \r\n\r\n
+         * Ensure here that we have at minimum two \r\n when EOF is seen.
+         * TODO: When headersEnd() is cleaned up to only be called once we can merge
+         * this as a special case there where it belongs.
+         */
+        if (!flags.headers_parsed) {
+            /*
+             * Yes Henrik, there is a point to doing this.  When we
+             * called httpProcessReplyHeader() before, we didn't find
+             * the end of headers, but now we are definately at EOF, so
+             * we want to process the reply headers.
+             */
+            /* Fake an "end-of-headers" to work around such broken servers */
+            readBuf->append("\r\n", 2);
+            len = 2;
+        }
     }
 
     if (!flags.headers_parsed) { // have not parsed headers yet?