Skip to content

Commit 868cb87

Browse files
mi-carenmanuelpelloni
authored andcommitted
fix: clamp suffix ranges exceeding file size instead of returning 416
RFC 7233 Section 2.1 states that if the selected representation is shorter than the specified suffix-length, the entire representation is used. `bytes=-999` on a 500-byte file now returns `bytes 0-499/500` (206) instead of 416.
1 parent d970a80 commit 868cb87

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

src/headers/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -480,9 +480,9 @@ mod file_range {
480480
}
481481

482482
#[test]
483-
fn suffix_exceeds_size() {
484-
let result = file_range(size(10), Some(HttpRange::Suffix(11)));
485-
assert!(result.is_err());
483+
fn suffix_exceeds_size_is_clamped() {
484+
let result = file_range(size(10), Some(HttpRange::Suffix(11))).unwrap();
485+
assert_eq!(result.range(), &(0..=9));
486486
}
487487

488488
#[test]

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub fn file_range(
5858
HttpRange::Range(range) if range.start() < size => {
5959
range.start()..=range.end().min(size - 1)
6060
}
61-
HttpRange::Suffix(suffix) if suffix > 0 && suffix <= size => size - suffix..=size - 1,
61+
HttpRange::Suffix(suffix) if suffix > 0 => size.saturating_sub(suffix)..=size - 1,
6262
_ => {
6363
let content_range = HttpContentRange::Unsatisfiable(Unsatisfiable::new(size));
6464
return Err(UnsatisfiableRange(content_range));

0 commit comments

Comments
 (0)