Mark Lentczner fixed how libcurl was not properly doing chunked encoding
authorDaniel Stenberg <daniel@haxx.se>
Wed, 2 Aug 2006 18:18:47 +0000 (18:18 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 2 Aug 2006 18:18:47 +0000 (18:18 +0000)
if the header "Transfer-Encoding: chunked" was set by the application.
http://curl.haxx.se/bug/view.cgi?id=1531838

CHANGES
RELEASE-NOTES
lib/http.c

diff --git a/CHANGES b/CHANGES
index 23e7ccbdbb48cb204414bc41028b882df3b7b9d1..33b9b3d22180652cd87456daea8f9a4f84307a9b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,11 @@
 
                                   Changelog
 
+Daniel (2 August 2006)
+- Mark Lentczner fixed how libcurl was not properly doing chunked encoding
+  if the header "Transfer-Encoding: chunked" was set by the application.
+  http://curl.haxx.se/bug/view.cgi?id=1531838
+
 Daniel (1 August 2006)
 - Maciej Karpiuk fixed a crash that would occur if we passed Curl_strerror()
   an unknown error number on glibc systems.
index 99722ccc4cbe5262d3e6895216c4ddb3565ece83..a447d6a82f6f068940fbf9649e8186fae2283991 100644 (file)
@@ -24,6 +24,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o chunked encoding when custom header "Transfer-Encoding: chunked" is set
  o Curl_strerror() crash on unknown errors
  o changing Content-Type when doing formposts
  o added CURL_EXTERN to a few recent multi functions that lacked them
@@ -51,6 +52,6 @@ advice from friends like these:
  Dan Fandrich, Peter Silva, Arve Knudsen, Michael Wallner, Toshiyuki Maezawa,
  Ingmar Runge, Ates Goral, David McCreedy, Jari Sundell, Georg Horn,
  Gisle Vanem, Yang Tse, Michael Jerris, Dan Nelson, Yves Lejeune,
- Maciej Karpiuk
+ Maciej Karpiuk, Mark Lentczner
 
         Thanks! (and sorry if I forgot to mention someone)
index f4898fcd5089fdc2e42cb0848422c4e939fcd5c8..512b17312449bbbb1f3aaad11a6d768d591cadd8 100644 (file)
@@ -1684,30 +1684,17 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
       return CURLE_OUT_OF_MEMORY;
   }
 
-  if(!conn->bits.upload_chunky && (httpreq != HTTPREQ_GET)) {
-    /* not a chunky transfer yet, but data is to be sent */
-    ptr = checkheaders(data, "Transfer-Encoding:");
-    if(ptr) {
-      /* Some kind of TE is requested, check if 'chunked' is chosen */
-      conn->bits.upload_chunky =
-        Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
-      te = "";
-    }
+  ptr = checkheaders(data, "Transfer-Encoding:");
+  if(ptr) {
+    /* Some kind of TE is requested, check if 'chunked' is chosen */
+    conn->bits.upload_chunky =
+      Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
   }
-  else if(conn->bits.upload_chunky) {
-    /* RFC2616 section 4.4:
-       Messages MUST NOT include both a Content-Length header field and a
-       non-identity transfer-coding. If the message does include a non-
-       identity transfer-coding, the Content-Length MUST be ignored. */
-
-    if(!checkheaders(data, "Transfer-Encoding:")) {
+  else {
+    if (httpreq == HTTPREQ_GET)
+      conn->bits.upload_chunky = FALSE;
+    if(conn->bits.upload_chunky)
       te = "Transfer-Encoding: chunked\r\n";
-    }
-    else {
-      te = "";
-      conn->bits.upload_chunky = FALSE; /* transfer-encoding was disabled,
-                                           so don't chunkify this! */
-    }
   }
 
   Curl_safefree(conn->allocptr.host);