Skip to content

Commit 0bed31b

Browse files
mi-carenmanuelpelloni
authored andcommitted
fix: correct matches_requested_range for suffix ranges
With suffix clamping, a non-zero suffix is always satisfiable regardless of file size. The only unsatisfiable suffix is `Suffix(0)`. Previously `Suffix(0)` against `Unsatisfiable` incorrectly returned `false` because `0 > size` is never true.
1 parent 868cb87 commit 0bed31b

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

src/headers/content_range.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,9 @@ impl HttpContentRange {
4444
HttpRange::Range(OrderedRange { end: n, .. }),
4545
HttpContentRange::Unsatisfiable(Unsatisfiable { size }),
4646
) => n >= *size,
47-
(
48-
HttpRange::Suffix(suffix),
49-
HttpContentRange::Unsatisfiable(Unsatisfiable { size }),
50-
) => suffix > *size,
47+
(HttpRange::Suffix(suffix), HttpContentRange::Unsatisfiable(Unsatisfiable { .. })) => {
48+
suffix == 0
49+
}
5150
}
5251
}
5352
}

src/headers/tests.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,20 @@ mod content_range {
146146
}
147147

148148
#[test]
149-
fn unsuccessful_range_suffix_range_content_bound() {
150-
let range = HttpRange::Suffix(50);
149+
fn unsuccessful_range_suffix_zero_content_unsatisfiable() {
150+
let range = HttpRange::Suffix(0);
151151
let content_range = HttpContentRange::Unsatisfiable(Unsatisfiable::new(20));
152152

153153
assert!(content_range.matches_requested_range(range));
154154
}
155+
156+
#[test]
157+
fn suffix_exceeding_size_is_not_unsatisfiable() {
158+
let range = HttpRange::Suffix(50);
159+
let content_range = HttpContentRange::Unsatisfiable(Unsatisfiable::new(20));
160+
161+
assert!(!content_range.matches_requested_range(range));
162+
}
155163
}
156164
}
157165

0 commit comments

Comments
 (0)