]> granicus.if.org Git - curl/commitdiff
Chih-Chung Chang reported that if you use CURLOPT_RESUME_FROM and enabled
authorDaniel Stenberg <daniel@haxx.se>
Wed, 6 Oct 2004 13:37:12 +0000 (13:37 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 6 Oct 2004 13:37:12 +0000 (13:37 +0000)
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).

CHANGES
RELEASE-NOTES
lib/transfer.c
tests/data/Makefile.am
tests/data/test99

diff --git a/CHANGES b/CHANGES
index 47daa98fafeaa9190d2cbb6fab438da0d9f4cd4d..f4ae70225dcd073a9dc4d5d1fd6d307a5efe256f 100644 (file)
--- 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().
 
index 7bf65dc027f0646aa717e06114960cff5eda11d9..b1cd98496238af4de6ee8f88718e7dfca4261495 100644 (file)
@@ -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)
index 7f7211048d620f333dc6780a66c64c9c2f2088fc..935e2cb8ec707d42ec57bee0efc0c075fb05d3ee 100644 (file)
@@ -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
index 83c76ad534df8c0392fdd0672ac6a498d1feffd5..d52cb2f9430b1dd9fe22cda992944b0128cd86a4 100644 (file)
@@ -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
index a9d404ba81607b09482ea1391e65962f68645b87..adc17d22a52ee45f814e4602f61cbb79a3a41c11 100644 (file)
@@ -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>
 
 #