A HTTP server is permitted to return a non-range response to a HTTP
range request (and Apache httpd in fact does this in some cases).
While libcurl knows how to correctly handle this (by skipping bytes
before and after the requested range), it only turns on this handling
if it is aware that a range request is being made.  By manually
setting the range header instead of using CURLOPT_RANGE, we were
hiding the fact that this was a range request from libcurl.  This
could cause corruption.

Signed-off-by: David Turner <dtur...@twopensource.com>
---
 http.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/http.c b/http.c
index 0f924a8..303b388 100644
--- a/http.c
+++ b/http.c
@@ -1202,8 +1202,9 @@ static int http_request(const char *url,
                        curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION,
                                         fwrite);
                        if (posn > 0) {
-                               strbuf_addf(&buf, "Range: bytes=%ld-", posn);
-                               headers = curl_slist_append(headers, buf.buf);
+                               strbuf_addf(&buf, "%ld-", posn);
+                               curl_easy_setopt(slot->curl, CURLOPT_RANGE,
+                                                &buf.buf);
                                strbuf_reset(&buf);
                        }
                } else
-- 
2.4.2.691.g714732c-twtrsrc

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to