From 0cc4466245120ace83b8ec4f196600cf59a05209 Mon Sep 17 00:00:00 2001 From: Roderick van Domburg Date: Thu, 13 Jan 2022 21:15:27 +0100 Subject: [PATCH] Improve range checks --- audio/src/fetch/mod.rs | 2 +- audio/src/fetch/receive.rs | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/audio/src/fetch/mod.rs b/audio/src/fetch/mod.rs index bbf2a974..30b8d859 100644 --- a/audio/src/fetch/mod.rs +++ b/audio/src/fetch/mod.rs @@ -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))?; diff --git a/audio/src/fetch/receive.rs b/audio/src/fetch/receive.rs index cc70a4f0..5d193062 100644 --- a/audio/src/fetch/receive.rs +++ b/audio/src/fetch/receive.rs @@ -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();