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 + + +HTTP/1.1 404 Nah +Date: Thu, 09 Nov 2010 14:49:00 GMT +Connection: close +Content-Length: 13 +Funny-head: yesyes + + #