diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 1e5a755..9704d95 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -138,7 +138,7 @@ impl RangeBody { pub fn get_range(file_size: u64, header: &SyntacticallyCorrectRange) -> Range { let range_start = match header.start { StartPosition::Index(i) => i, - StartPosition::FromLast(i) => file_size - i, + StartPosition::FromLast(i) => file_size.saturating_sub(i), }; let range_end = match header.end { EndPosition::Index(i) => i, @@ -514,6 +514,11 @@ mod tests { let r = RangeBody::get_range(size, req.ranges.first().unwrap()); assert_eq!(r.start, 16482459); 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(()) } } \ No newline at end of file