aboutsummaryrefslogtreecommitdiff
path: root/lib/http.c
diff options
context:
space:
mode:
authorCédric Deltheil <cedric@moodstocks.com>2014-01-19 23:24:03 +0100
committerDaniel Stenberg <daniel@haxx.se>2014-01-20 12:50:51 +0100
commitafd288b28f2087fca1f9ae860a05e77750ef44a7 (patch)
tree9a00155266ed75f3d18e021e107bfea68020b1db /lib/http.c
parent39f7e80a52c3b23b36015dcf0d3655af43a70f49 (diff)
HTTP POST: omit Content-Length if data size is unknown
This prevents sending a `Content-Length: -1` header, e.g this ocurred with the following combination: * standard HTTP POST (no chunked encoding), * user-defined read function set, * `CURLOPT_POSTFIELDSIZE(_LARGE)` NOT set. With this fix it now behaves like HTTP PUT.
Diffstat (limited to 'lib/http.c')
-rw-r--r--lib/http.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/lib/http.c b/lib/http.c
index 04692af11..da03a44c5 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -2408,20 +2408,19 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
data->set.postfieldsize:
(data->set.postfields? (curl_off_t)strlen(data->set.postfields):-1);
}
- if(!data->req.upload_chunky) {
- /* We only set Content-Length and allow a custom Content-Length if
- we don't upload data chunked, as RFC2616 forbids us to set both
- kinds of headers (Transfer-Encoding: chunked and Content-Length) */
-
- if(conn->bits.authneg || !Curl_checkheaders(data, "Content-Length:")) {
- /* we allow replacing this header if not during auth negotiation,
- although it isn't very wise to actually set your own */
- result = Curl_add_bufferf(req_buffer,
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T
- "\r\n", postsize);
- if(result)
- return result;
- }
+
+ /* We only set Content-Length and allow a custom Content-Length if
+ we don't upload data chunked, as RFC2616 forbids us to set both
+ kinds of headers (Transfer-Encoding: chunked and Content-Length) */
+ if((postsize != -1) && !data->req.upload_chunky &&
+ !Curl_checkheaders(data, "Content-Length:")) {
+ /* we allow replacing this header if not during auth negotiation,
+ although it isn't very wise to actually set your own */
+ result = Curl_add_bufferf(req_buffer,
+ "Content-Length: %" CURL_FORMAT_CURL_OFF_T
+ "\r\n", postsize);
+ if(result)
+ return result;
}
if(!Curl_checkheaders(data, "Content-Type:")) {