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
This commit is contained in:
Daniel Stenberg 2006-08-02 18:18:47 +00:00
parent fbcdc192d5
commit 8a38c72c48
3 changed files with 16 additions and 23 deletions

View File

@ -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.

View 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)

View 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);