From 1efca5fe19c65d94d35992faf66a5dcbe629491c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 19 Jul 2018 16:26:16 +0200 Subject: [PATCH] Fix index out of bounds panic during audio buffer source processing --- audio/src/buffer_source_node.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/audio/src/buffer_source_node.rs b/audio/src/buffer_source_node.rs index 309b5a9b..cab9f169 100644 --- a/audio/src/buffer_source_node.rs +++ b/audio/src/buffer_source_node.rs @@ -135,7 +135,13 @@ impl AudioNodeEngine for AudioBufferSourceNode { ticks_to_stop.0 as usize } } - None => FRAMES_PER_BLOCK.0 as usize, + None => { + if self.playback_offset + (FRAMES_PER_BLOCK.0 as usize) < len { + FRAMES_PER_BLOCK.0 as usize + } else { + len - self.playback_offset + } + }, }; let next_offset = self.playback_offset + samples_to_copy; @@ -154,6 +160,7 @@ impl AudioNodeEngine for AudioBufferSourceNode { block.explicit_repeat(); for chan in 0..buffer.chans() { let data = block.data_chan_mut(chan); + let (data, _) = data.split_at_mut(samples_to_copy); data.copy_from_slice( &buffer.buffers[chan as usize][self.playback_offset..next_offset], );