mirror of
https://github.com/curl/curl.git
synced 2026-08-25 13:33:36 +03:00
Fixed a flaw in the "Expect: 100-continue" treatment. If you did two POSTs
on a persistent connection and allowed the first to use that header, you could not disable it for the second request.
This commit is contained in:
parent
c410769588
commit
a4ebf5b507
5 changed files with 21 additions and 21 deletions
|
|
@ -1516,6 +1516,8 @@ static CURLcode expect100(struct SessionHandle *data,
|
|||
send_buffer *req_buffer)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
data->state.expect100header = FALSE; /* default to false unless it is set
|
||||
to TRUE below */
|
||||
if((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
|
||||
!checkheaders(data, "Expect:")) {
|
||||
/* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
|
||||
|
|
@ -1525,7 +1527,7 @@ static CURLcode expect100(struct SessionHandle *data,
|
|||
result = add_bufferf(req_buffer,
|
||||
"Expect: 100-continue\r\n");
|
||||
if(result == CURLE_OK)
|
||||
data->set.expect100header = TRUE;
|
||||
data->state.expect100header = TRUE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1532,14 +1532,14 @@ CURLcode Curl_readwrite_init(struct connectdata *conn)
|
|||
Thus, we must check if the request has been sent before we set the
|
||||
state info where we wait for the 100-return code
|
||||
*/
|
||||
if (data->set.expect100header &&
|
||||
if (data->state.expect100header &&
|
||||
(conn->proto.http->sending == HTTPSEND_BODY)) {
|
||||
/* wait with write until we either got 100-continue or a timeout */
|
||||
k->write_after_100_header = TRUE;
|
||||
k->start100 = k->start;
|
||||
}
|
||||
else {
|
||||
if(data->set.expect100header)
|
||||
if(data->state.expect100header)
|
||||
/* when we've sent off the rest of the headers, we must await a
|
||||
100-continue */
|
||||
k->wait100_after_headers = TRUE;
|
||||
|
|
|
|||
|
|
@ -940,6 +940,8 @@ struct UrlState {
|
|||
/* set after initial USER failure, to prevent an authentication loop */
|
||||
bool ftp_trying_alternative;
|
||||
|
||||
bool expect100header; /* TRUE if we added Expect: 100-continue */
|
||||
|
||||
#ifndef WIN32
|
||||
/* do FTP line-end conversions on most platforms */
|
||||
#define CURL_DO_LINEEND_CONV
|
||||
|
|
@ -1135,7 +1137,6 @@ struct UserDefined {
|
|||
bool krb4; /* kerberos4 connection requested */
|
||||
bool reuse_forbid; /* forbidden to be reused, close after use */
|
||||
bool reuse_fresh; /* do not re-use an existing connection */
|
||||
bool expect100header; /* TRUE if we added Expect: 100-continue */
|
||||
bool ftp_use_epsv; /* if EPSV is to be attempted or not */
|
||||
bool ftp_use_eprt; /* if EPRT is to be attempted or not */
|
||||
curl_ftpssl ftp_ssl; /* if AUTH TLS is to be attempted etc */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue