summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-10-06 13:37:12 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-10-06 13:37:12 +0000
commit9a2aed7d7ac2f8fbb79fe411b3b01d8a60f0c726 (patch)
tree3db9f63a9c500220fe9cc34c1fe1fe1d8267f5f1
parenta91a75355d863e6aeb849f0de9169234217990bc (diff)
downloadgnurl-9a2aed7d7ac2f8fbb79fe411b3b01d8a60f0c726.tar.gz
gnurl-9a2aed7d7ac2f8fbb79fe411b3b01d8a60f0c726.tar.bz2
gnurl-9a2aed7d7ac2f8fbb79fe411b3b01d8a60f0c726.zip
Chih-Chung Chang reported that if you use CURLOPT_RESUME_FROM and enabled
CURLOPT_FOLLOWLOCATION, libcurl reported error if a redirect happened even if the new URL would provide the resumed file. Test case 188 added to verify the fix (together with existing test 99).
-rw-r--r--CHANGES5
-rw-r--r--RELEASE-NOTES3
-rw-r--r--lib/transfer.c29
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test9910
5 files changed, 34 insertions, 15 deletions
diff --git a/CHANGES b/CHANGES
index 47daa98fa..f4ae70225 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,11 @@
Changelog
Daniel (6 October 2004)
+- Chih-Chung Chang reported that if you use CURLOPT_RESUME_FROM and enabled
+ CURLOPT_FOLLOWLOCATION, libcurl reported error if a redirect happened even
+ if the new URL would provide the resumed file. Test case 188 added to verify
+ the fix (together with existing test 99).
+
- Dan Fandrich fixed a configure flaw for systems that need both nsl and socket
libs to use gethostbyname().
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 7bf65dc02..b1cd98496 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -19,6 +19,7 @@ This release includes the following changes:
This release includes the following bugfixes:
+ o HTTP resume was refused if redirected
o configure's gethostbyname check when both nsl and socket libs are required
o configure --with-libidn now checks the given path before defaults
o a race condition sometimes resulting in CURLE_COULDNT_RESOLVE_HOST in the
@@ -63,6 +64,6 @@ advice from friends like these:
Tarendash, Daniel at touchtunes, Bertrand Demiddelaer, Andreas Rieke,
Jean-Claude Chauve, Dan Fandrich, Peter Sylvester, "Mekonikum", Jean-Philippe
Barrette-LaPierre, Günter Knauf, Larry Campbell, Fedor Karpelevitch,
- Aleksandar Milivojevic, Gisle Vanem, Chris "Bob Bob"
+ Aleksandar Milivojevic, Gisle Vanem, Chris "Bob Bob", Chih-Chung Chang
Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/transfer.c b/lib/transfer.c
index 7f7211048..935e2cb8e 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -488,20 +488,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,
if (conn->resume_from &&
!k->content_range &&
- (data->set.httpreq==HTTPREQ_GET)) {
- if(k->httpcode == 416) {
- /* "Requested Range Not Satisfiable" */
- stop_reading = TRUE;
- }
- else {
- /* 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.");
- return CURLE_HTTP_RANGE_ERROR;
- }
+ (data->set.httpreq==HTTPREQ_GET) &&
+ (k->httpcode == 416)) {
+ /* "Requested Range Not Satisfiable" */
+ stop_reading = TRUE;
}
+
#ifndef CURL_DISABLE_HTTP
if(!stop_reading) {
/* Curl_http_auth_act() checks what authentication methods
@@ -956,6 +948,17 @@ CURLcode Curl_readwrite(struct connectdata *conn,
k->ignorebody = TRUE;
infof(data, "Ignoring the response-body\n");
}
+ if (conn->resume_from && !k->content_range &&
+ (data->set.httpreq==HTTPREQ_GET) &&
+ !k->ignorebody) {
+ /* 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.");
+ return CURLE_HTTP_RANGE_ERROR;
+ }
+
if(data->set.timecondition && !conn->range) {
/* A time condition has been set AND no ranges have been
requested. This seems to be what chapter 13.3.4 of
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 83c76ad53..d52cb2f94 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -26,7 +26,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test512 test165 test166 test167 test168 test169 test170 test171 \
test172 test204 test205 test173 test174 test175 test176 test177 \
test513 test514 test178 test179 test180 test181 test182 test183 \
- test184 test185 test186 test187
+ test184 test185 test186 test187 test188
# 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/test99 b/tests/data/test99
index a9d404ba8..adc17d22a 100644
--- a/tests/data/test99
+++ b/tests/data/test99
@@ -8,7 +8,17 @@ Connection: close
Content-Length: 13
Funny-head: yesyes
+0123456789123
</data>
+
+<datacheck>
+HTTP/1.1 404 Nah
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 13
+Funny-head: yesyes
+
+</datacheck>
</reply>
#