From 1e66d052fd50be46d3b0dc2482bc5ef2868befe4 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Fri, 6 May 2022 12:06:20 +0100 Subject: [PATCH] fs: fix FixRangeOption to make fetch to end Range options absolute Before this change FixRangeOption was leaving `Range: bytes=21-` alone, thus not fulfilling its contract of making Range requests absolute. As it happens this form isn't supported by Cloudflare R2. After this change the request is normalised to `Range: bytes=21-25`. See: #5642 --- fs/open_options.go | 3 ++- fs/open_options_test.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fs/open_options.go b/fs/open_options.go index 8d997118a..268024b17 100644 --- a/fs/open_options.go +++ b/fs/open_options.go @@ -158,7 +158,8 @@ func FixRangeOption(options []OpenOption, size int64) { x = &RangeOption{Start: size - x.End, End: -1} options[i] = x } - if x.End > size { + // If end is too big or undefined, fetch to the end + if x.End > size || x.End < 0 { x = &RangeOption{Start: x.Start, End: size - 1} options[i] = x } diff --git a/fs/open_options_test.go b/fs/open_options_test.go index 52fc42ddb..6327a8c9e 100644 --- a/fs/open_options_test.go +++ b/fs/open_options_test.go @@ -183,7 +183,7 @@ func TestFixRangeOptions(t *testing.T) { &RangeOption{Start: 1, End: -1}, }, want: []OpenOption{ - &RangeOption{Start: 1, End: -1}, + &RangeOption{Start: 1, End: 99}, }, size: 100, }, @@ -193,7 +193,7 @@ func TestFixRangeOptions(t *testing.T) { &RangeOption{Start: -1, End: 10}, }, want: []OpenOption{ - &RangeOption{Start: 90, End: -1}, + &RangeOption{Start: 90, End: 99}, }, size: 100, },