git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] http.c: use CURLOPT_RANGE for range requests
@ 2015-10-30 22:41 David Turner
  2015-10-30 22:43 ` David Turner
  0 siblings, 1 reply; 2+ messages in thread
From: David Turner @ 2015-10-30 22:41 UTC (permalink / raw)
  To: git; +Cc: David Turner

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 <dturner@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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] http.c: use CURLOPT_RANGE for range requests
  2015-10-30 22:41 [PATCH] http.c: use CURLOPT_RANGE for range requests David Turner
@ 2015-10-30 22:43 ` David Turner
  0 siblings, 0 replies; 2+ messages in thread
From: David Turner @ 2015-10-30 22:43 UTC (permalink / raw)
  To: git mailing list

Please disregard this; I noticed I missed a few instances.  Will reroll
shortly.


On Fri, 2015-10-30 at 18:41 -0400, David Turner wrote:
> 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 <dturner@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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-10-30 22:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-30 22:41 [PATCH] http.c: use CURLOPT_RANGE for range requests David Turner
2015-10-30 22:43 ` David Turner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).