Tomas Pospisek filed bug report #1053287 that proved -C - and --fail on a

file that was already completely downloaded caused an error, while it
doesn't if you don't use --fail! I added test case 194 to verify the fix.
Grrr. CURLOPT_FAILONERROR is now added to the list stuff to remove in
libcurl v8 due to all the kludges needed to support it.
This commit is contained in:
Daniel Stenberg 2004-10-25 11:28:40 +00:00
parent e1607f5705
commit a00e7f0f5e
6 changed files with 79 additions and 8 deletions

View File

@ -7,6 +7,12 @@
Changelog
Daniel (25 October 2004)
- Tomas Pospisek filed bug report #1053287 that proved -C - and --fail on a
file that was already completely downloaded caused an error, while it
doesn't if you don't use --fail! I added test case 194 to verify the fix.
Grrr. CURLOPT_FAILONERROR is now added to the list stuff to remove in
libcurl v8 due to all the kludges needed to support it.
- Mohun Biswas found out that formposting a zero-byte file didn't work very
good. I fixed.

View File

@ -250,3 +250,6 @@ TODO
They will instead become curlx_ - alternatives. That makes the curl app
still capable of building with them from source.
* Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
internally. Let the app judge success or not for itself.

View File

@ -553,6 +553,14 @@ int Curl_http_should_fail(struct connectdata *conn)
if (k->httpcode < 400)
return 0;
if (conn->resume_from &&
(data->set.httpreq==HTTPREQ_GET) &&
(k->httpcode == 416)) {
/* "Requested Range Not Satisfiable", just proceed and
pretend this is no error */
return 0;
}
/*
** Any code >= 400 that's not 401 or 407 is always
** a terminal error

View File

@ -487,7 +487,6 @@ CURLcode Curl_readwrite(struct connectdata *conn,
(100 == k->httpcode)?conn->headerbytecount:0;
if (conn->resume_from &&
!k->content_range &&
(data->set.httpreq==HTTPREQ_GET) &&
(k->httpcode == 416)) {
/* "Requested Range Not Satisfiable" */
@ -613,10 +612,19 @@ CURLcode Curl_readwrite(struct connectdata *conn,
(k->httpcode >= 400) &&
(k->httpcode != 401) &&
(k->httpcode != 407)) {
/* serious error, go home! */
failf (data, "The requested URL returned error: %d",
k->httpcode);
return CURLE_HTTP_RETURNED_ERROR;
if (conn->resume_from &&
(data->set.httpreq==HTTPREQ_GET) &&
(k->httpcode == 416)) {
/* "Requested Range Not Satisfiable", just proceed and
pretend this is no error */
}
else {
/* serious error, go home! */
failf (data, "The requested URL returned error: %d",
k->httpcode);
return CURLE_HTTP_RETURNED_ERROR;
}
}
if(k->httpversion == 10)
@ -954,8 +962,8 @@ CURLcode Curl_readwrite(struct connectdata *conn,
/* we wanted to resume a download, although the server doesn't
* seem to support this and we did this with a GET (if it
* wasn't a GET we did a POST or PUT resume) */
failf (data, "HTTP server doesn't seem to support "
"byte ranges. Cannot resume.");
failf(data, "HTTP server doesn't seem to support "
"byte ranges. Cannot resume.");
return CURLE_HTTP_RANGE_ERROR;
}

View File

@ -27,7 +27,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test172 test204 test205 test173 test174 test175 test176 test177 \
test513 test514 test178 test179 test180 test181 test182 test183 \
test184 test185 test186 test187 test188 test189 test191 test192 \
test193
test193 test194
# The following tests have been removed from the dist since they no longer
# work. We need to fix the test suite's FTPS server first, then bring them

46
tests/data/test194 Normal file
View File

@ -0,0 +1,46 @@
# Server-side
<reply>
<data>
HTTP/1.1 416 Requested Range Not Satisfiable swsclose
Date: Fri, 24 Oct 2003 21:33:12 GMT
Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 PHP/4.3.1
Last-Modified: Fri, 24 Oct 2003 18:01:23 GMT
ETag: "ab57a-507-3f9968f3"
Accept-Ranges: bytes
Content-Length: 87
Content-Range: bytes */87
Content-Type: image/gif
Connection: close
</data>
</reply>
# Client-side
<client>
<server>
http
</server>
<name>
HTTP resume transfer with the whole file already downloaded and --fail
</name>
<command>
http://%HOSTIP:%HTTPPORT/want/194 -C 87 --fail
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /want/194 HTTP/1.1
Range: bytes=87-
Host: 127.0.0.1:%HTTPPORT
Pragma: no-cache
Accept: */*
</protocol>
</verify>