aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES6
-rw-r--r--docs/TODO3
-rw-r--r--lib/http.c8
-rw-r--r--lib/transfer.c22
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test19446
6 files changed, 79 insertions, 8 deletions
diff --git a/CHANGES b/CHANGES
index 1f3813fbe..c9b7f15f0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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.
diff --git a/docs/TODO b/docs/TODO
index 081d23c41..7145b46f3 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -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.
diff --git a/lib/http.c b/lib/http.c
index 80484975f..ee5b81ff6 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -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
diff --git a/lib/transfer.c b/lib/transfer.c
index 14512a774..904dbd15b 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -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;
}
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 0f63d5f6f..7298caf7a 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -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
diff --git a/tests/data/test194 b/tests/data/test194
new file mode 100644
index 000000000..4e6e0f386
--- /dev/null
+++ b/tests/data/test194
@@ -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>