From c6b8807dbf6a1daaf1babf65609ed516b813c21f Mon Sep 17 00:00:00 2001 From: Marin Date: Sun, 25 Oct 2026 09:41:46 +0100 Subject: [PATCH] fix/prevent-wav-5gb-alloc: Prevent integer underflow in `decoder::wav::SamplesIterator::next` causing 5 GB allocation when reading certain WAV files --- src/decoder/wav.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/decoder/wav.rs b/src/decoder/wav.rs index f73482087..94e4badb4 100644 --- a/src/decoder/wav.rs +++ b/src/decoder/wav.rs @@ -99,7 +99,6 @@ where return Some(Sample::EQUILIBRIUM); } - self.samples_read += 1; let spec = self.reader.spec(); let next_sample: Option = match (spec.sample_format, spec.bits_per_sample as u32) { @@ -153,6 +152,7 @@ where match next_sample { Some(sample) => { + self.samples_read += 1; self.samples_in_current_frame = (self.samples_in_current_frame + 1) % self.channels.get() as usize; return Some(sample); @@ -173,7 +173,7 @@ where #[inline] fn size_hint(&self) -> (usize, Option) { - let len = (self.reader.len() - self.samples_read) as usize; + let len = self.reader.len().saturating_sub(self.samples_read) as usize; (len, Some(len)) } }