mirror of
https://github.com/sigoden/dufs.git
synced 2026-06-07 15:59:03 +03:00
fix: http range underflow (#690)
This commit is contained in:
+1
-1
@@ -121,7 +121,7 @@ pub fn parse_range(range: &str, size: u64) -> Option<Vec<(u64, u64)>> {
|
|||||||
result.push((start, size - 1));
|
result.push((start, size - 1));
|
||||||
} else {
|
} else {
|
||||||
let end = end.parse::<u64>().ok()?;
|
let end = end.parse::<u64>().ok()?;
|
||||||
if end < size {
|
if end < size && start <= end {
|
||||||
result.push((start, end));
|
result.push((start, end));
|
||||||
} else {
|
} else {
|
||||||
return None;
|
return None;
|
||||||
|
|||||||
@@ -104,3 +104,25 @@ fn get_file_multipart_range_invalid(server: TestServer) -> Result<(), Error> {
|
|||||||
assert_eq!(resp.headers().get("content-length").unwrap(), "0");
|
assert_eq!(resp.headers().get("content-length").unwrap(), "0");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn get_file_range_reversed(server: TestServer) -> Result<(), Error> {
|
||||||
|
let resp = fetch!(b"GET", format!("{}index.html", server.url()))
|
||||||
|
.header("range", HeaderValue::from_static("bytes=10-1"))
|
||||||
|
.send()?;
|
||||||
|
assert_eq!(resp.status(), 416);
|
||||||
|
assert_eq!(resp.headers().get("content-range").unwrap(), "bytes */18");
|
||||||
|
assert_eq!(resp.headers().get("accept-ranges").unwrap(), "bytes");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn get_file_multipart_range_reversed(server: TestServer) -> Result<(), Error> {
|
||||||
|
let resp = fetch!(b"GET", format!("{}index.html", server.url()))
|
||||||
|
.header("range", HeaderValue::from_static("bytes=10-1,20-2"))
|
||||||
|
.send()?;
|
||||||
|
assert_eq!(resp.status(), 416);
|
||||||
|
assert_eq!(resp.headers().get("content-range").unwrap(), "bytes */18");
|
||||||
|
assert_eq!(resp.headers().get("accept-ranges").unwrap(), "bytes");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user