Improve range checks

This commit is contained in:
Roderick van Domburg 2022-01-13 21:15:27 +01:00
parent e627cb4b35
commit 0cc4466245
No known key found for this signature in database
GPG key ID: A9EF5222A26F0451
2 changed files with 11 additions and 4 deletions

View file

@ -558,7 +558,7 @@ impl Read for AudioFileStreaming {
let available_length = download_status
.downloaded
.contained_length_from_value(offset);
assert!(available_length > 0);
drop(download_status);
self.position = self.read_file.seek(SeekFrom::Start(offset as u64))?;

View file

@ -53,8 +53,7 @@ async fn receive_data(
Some(Err(e)) => break Err(e.into()),
None => {
if actual_length != request.length {
let msg =
format!("did not expect body to contain {} bytes", actual_length,);
let msg = format!("did not expect body to contain {} bytes", actual_length);
break Err(Error::data_loss(msg));
}
@ -83,6 +82,11 @@ async fn receive_data(
if measure_ping_time {
let mut duration = Instant::now() - request.request_time;
if duration > MAXIMUM_ASSUMED_PING_TIME {
warn!(
"Ping time {} ms exceeds maximum {}, setting to maximum",
duration.as_millis(),
MAXIMUM_ASSUMED_PING_TIME.as_millis()
);
duration = MAXIMUM_ASSUMED_PING_TIME;
}
file_data_tx.send(ReceivedData::ResponseTime(duration))?;
@ -135,7 +139,10 @@ impl AudioFileFetch {
}
if offset + length > self.shared.file_size {
length = self.shared.file_size - offset;
return Err(Error::out_of_range(format!(
"Range {} +{} exceeds file size {}",
offset, length, self.shared.file_size
)));
}
let mut ranges_to_request = RangeSet::new();