Commit 8a38c72c authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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
parent fbcdc192
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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.
+2 −1
Original line number Diff line number Diff line
@@ -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)
+9 −22
Original line number Diff line number Diff line
@@ -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 = "";
    }
  }
  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:")) {
      te = "Transfer-Encoding: chunked\r\n";
  }
  else {
      te = "";
      conn->bits.upload_chunky = FALSE; /* transfer-encoding was disabled,
                                           so don't chunkify this! */
    }
    if (httpreq == HTTPREQ_GET)
      conn->bits.upload_chunky = FALSE;
    if(conn->bits.upload_chunky)
      te = "Transfer-Encoding: chunked\r\n";
  }

  Curl_safefree(conn->allocptr.host);