From 974fa1242aa9e7a95c687cb1d074240c53ffb33b Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 25 Jun 2007 13:58:14 +0000 Subject: [PATCH] Adjusted how libcurl treats HTTP 1.1 responses without content-lenth or chunked encoding (that also lacks "Connection: close"). It now simply assumes that the connection WILL be closed to signal the end, as that is how RFC2616 section 4.4 point #5 says we should behave. --- CHANGES | 6 ++++++ RELEASE-NOTES | 3 ++- lib/transfer.c | 11 ++++++----- tests/data/test282 | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 8551439..5068112 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,12 @@ Changelog +Daniel S (25 June 2007) +- Adjusted how libcurl treats HTTP 1.1 responses without content-lenth or + chunked encoding (that also lacks "Connection: close"). It now simply + assumes that the connection WILL be closed to signal the end, as that is how + RFC2616 section 4.4 point #5 says we should behave. + Version 7.16.3 (25 June 2007) Daniel S (23 June 2007) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 54e75bd..19ab978 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -15,7 +15,8 @@ This release includes the following changes: This release includes the following bugfixes: - o + o adjusted how libcurl treats HTTP 1.1 responses without content-lenth or + chunked encoding This release includes the following known bugs: diff --git a/lib/transfer.c b/lib/transfer.c index 703f408..35e8192 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -577,11 +577,12 @@ CURLcode Curl_readwrite(struct connectdata *conn, (k->httpversion >= 11) ) /* On HTTP 1.1, when connection is not to get closed, but no Content-Length nor Content-Encoding chunked have been - received, there is no body in this response. We don't set - stop_reading TRUE since that would also prevent necessary - authentication actions to take place. */ - conn->bits.no_body = TRUE; - + received, according to RFC2616 section 4.4 point 5, we + assume that the server will close the connection to + signal the end of the document. */ + infof(data, "no chunk, no close, no size. Assume close to " + "signal end\n"); + conn->bits.close = TRUE; } if (417 == k->httpcode) { diff --git a/tests/data/test282 b/tests/data/test282 index 557e461..aa8aba5 100644 --- a/tests/data/test282 +++ b/tests/data/test282 @@ -10,7 +10,7 @@ HTTP GET # Server-side -HTTP/1.1 200 OK +HTTP/1.1 200 OK swsclose -- 2.7.4