fix: invalid range for size

This commit is contained in:
2025-02-27 16:16:37 +00:00
parent 1a5388fc1c
commit 57050567c4

View File

@ -138,7 +138,7 @@ impl RangeBody {
pub fn get_range(file_size: u64, header: &SyntacticallyCorrectRange) -> Range<u64> { pub fn get_range(file_size: u64, header: &SyntacticallyCorrectRange) -> Range<u64> {
let range_start = match header.start { let range_start = match header.start {
StartPosition::Index(i) => i, StartPosition::Index(i) => i,
StartPosition::FromLast(i) => file_size - i, StartPosition::FromLast(i) => file_size.saturating_sub(i),
}; };
let range_end = match header.end { let range_end = match header.end {
EndPosition::Index(i) => i, EndPosition::Index(i) => i,
@ -514,6 +514,11 @@ mod tests {
let r = RangeBody::get_range(size, req.ranges.first().unwrap()); let r = RangeBody::get_range(size, req.ranges.first().unwrap());
assert_eq!(r.start, 16482459); assert_eq!(r.start, 16482459);
assert_eq!(r.end, 16482468); assert_eq!(r.end, 16482468);
let req = parse_range_header("bytes=-16482470")?;
let r = RangeBody::get_range(size, req.ranges.first().unwrap());
assert_eq!(r.start, 0);
assert_eq!(r.end, 16482468);
Ok(()) Ok(())
} }
} }