1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

Phil Blundell provided a fix for libcurl's treatment of unexpected 1xx

response codes. Previously libcurl would hang on such occurances. I added
test case 1033 to verify.
This commit is contained in:
Daniel Stenberg 2008-07-03 08:47:53 +00:00
parent 7c648782bc
commit 82412f218f
6 changed files with 70 additions and 5 deletions

View File

@ -7,6 +7,10 @@
Changelog Changelog
Daniel Stenberg (3 Jul 2008) Daniel Stenberg (3 Jul 2008)
- Phil Blundell provided a fix for libcurl's treatment of unexpected 1xx
response codes. Previously libcurl would hang on such occurances. I added
test case 1033 to verify.
- Introcuding a new timestamp for curl_easy_getinfo(): - Introcuding a new timestamp for curl_easy_getinfo():
CURLINFO_APPCONNECT_TIME. This is set with the "application layer" CURLINFO_APPCONNECT_TIME. This is set with the "application layer"
handshake/connection is completed. Which typically is SSL, TLS or SSH and by handshake/connection is completed. Which typically is SSL, TLS or SSH and by

View File

@ -29,6 +29,7 @@ This release includes the following bugfixes:
o range requests with --head are now done correctly o range requests with --head are now done correctly
o fallback to gettimeofday when monotonic clock is unavailable at run-time o fallback to gettimeofday when monotonic clock is unavailable at run-time
o range numbers could be made to wrongly get output as signed o range numbers could be made to wrongly get output as signed
o unexpected 1xx responses hung transfers
This release includes the following known bugs: This release includes the following known bugs:
@ -48,7 +49,7 @@ advice from friends like these:
Lenny Rachitsky, Axel Tillequin, Arnaud Ebalard, Yang Tse, Dan Fandrich, Lenny Rachitsky, Axel Tillequin, Arnaud Ebalard, Yang Tse, Dan Fandrich,
Rob Crittenden, Dengminwen, Christopher Palow, Hans-Jurgen May, Rob Crittenden, Dengminwen, Christopher Palow, Hans-Jurgen May,
Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen, Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen,
Rolland Dudemaine Rolland Dudemaine, Phil Blundell
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -369,7 +369,7 @@ CURLcode Curl_http_auth_act(struct connectdata *conn)
bool pickproxy = FALSE; bool pickproxy = FALSE;
CURLcode code = CURLE_OK; CURLcode code = CURLE_OK;
if(100 == data->req.httpcode) if(100 <= data->req.httpcode && 199 >= data->req.httpcode)
/* this is a transient response code, ignore */ /* this is a transient response code, ignore */
return CURLE_OK; return CURLE_OK;

View File

@ -587,7 +587,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
k->p++; /* pass the \n byte */ k->p++; /* pass the \n byte */
#endif /* CURL_DOES_CONVERSIONS */ #endif /* CURL_DOES_CONVERSIONS */
if(100 == k->httpcode) { if(100 <= k->httpcode && 199 >= k->httpcode) {
/* /*
* We have made a HTTP PUT or POST and this is 1.1-lingo * We have made a HTTP PUT or POST and this is 1.1-lingo
* that tells us that the server is OK with this and ready * that tells us that the server is OK with this and ready
@ -661,7 +661,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
data->req.headerbytecount += (long)headerlen; data->req.headerbytecount += (long)headerlen;
data->req.deductheadercount = data->req.deductheadercount =
(100 == k->httpcode)?data->req.headerbytecount:0; (100 <= k->httpcode && 199 >= k->httpcode)?data->req.headerbytecount:0;
if(data->state.resume_from && if(data->state.resume_from &&
(data->set.httpreq==HTTPREQ_GET) && (data->set.httpreq==HTTPREQ_GET) &&

View File

@ -51,7 +51,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test1021 test1022 test1023 test309 test616 test617 test618 test619 \ test1021 test1022 test1023 test309 test616 test617 test618 test619 \
test620 test621 test622 test623 test624 test625 test626 test627 test554 \ test620 test621 test622 test623 test624 test625 test626 test627 test554 \
test1024 test1025 test555 test1026 test1027 test1028 test1029 test1030 \ test1024 test1025 test555 test1026 test1027 test1028 test1029 test1030 \
test556 test1031 test628 test629 test630 test631 test632 test1032 test556 test1031 test628 test629 test630 test631 test632 test1032 test1033
filecheck: filecheck:
@mkdir test-place; \ @mkdir test-place; \

60
tests/data/test1033 Normal file
View File

@ -0,0 +1,60 @@
#
# This case with an unexpected 1xx response used to cause a "hang" before the fix
# got 7.19.0
<testcase>
<info>
<keywords>
HTTP
HTTP GET
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 102 unexpected huh?!
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes
-foo-
</data>
</reply>
#
# Client-side
<client>
<server>
http
</server>
<name>
HTTP GET with 102 response!
</name>
<command>
http://%HOSTIP:%HTTPPORT/1033
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1033 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
</protocol>
</verify>
</testcase>