Skip to content

Commit 60a9c4e

Browse files
committed
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 0afa329 commit 60a9c4e

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

src/headers/content_range.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ impl HttpContentRange {
4646
) => n >= *size,
4747
(
4848
HttpRange::Suffix(suffix),
49-
HttpContentRange::Unsatisfiable(Unsatisfiable { size }),
50-
) => suffix > *size,
49+
HttpContentRange::Unsatisfiable(Unsatisfiable { .. }),
50+
) => suffix == 0,
5151
}
5252
}
5353
}

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)