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.
This commit is contained in:
Cédric Deltheil 2014-01-19 23:24:03 +01:00 committed by Daniel Stenberg
parent 39f7e80a52
commit afd288b28f
1 changed files with 12 additions and 13 deletions

View File

@ -2408,20 +2408,19 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
data->set.postfieldsize: data->set.postfieldsize:
(data->set.postfields? (curl_off_t)strlen(data->set.postfields):-1); (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 only set Content-Length and allow a custom Content-Length if
/* we allow replacing this header if not during auth negotiation, we don't upload data chunked, as RFC2616 forbids us to set both
although it isn't very wise to actually set your own */ kinds of headers (Transfer-Encoding: chunked and Content-Length) */
result = Curl_add_bufferf(req_buffer, if((postsize != -1) && !data->req.upload_chunky &&
"Content-Length: %" CURL_FORMAT_CURL_OFF_T !Curl_checkheaders(data, "Content-Length:")) {
"\r\n", postsize); /* we allow replacing this header if not during auth negotiation,
if(result) although it isn't very wise to actually set your own */
return result; 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:")) { if(!Curl_checkheaders(data, "Content-Type:")) {