From 5ae60a4a9a1508eb373ef541b6e9b37d2a4739d8 Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Fri, 23 Apr 2010 00:22:17 +1200 Subject: [PATCH] Author: Unknown Bug 2879: 3.0 regression in headers end finding Ported from Squid-2. --- src/http.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/http.cc b/src/http.cc index 4bbe5aa43e..a52cb5be37 100644 --- a/src/http.cc +++ b/src/http.cc @@ -1125,6 +1125,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? -- 2.47.3