From 57050567c4f959223316be97a9a52b8bccf48ae3 Mon Sep 17 00:00:00 2001 From: kieran Date: Thu, 27 Feb 2025 16:16:37 +0000 Subject: [PATCH] fix: invalid range for size --- src/routes/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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