From cbbaf148f4ce191ce682632dec95bb645ea300f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 27 Sep 2023 00:07:35 +0200 Subject: [PATCH] Don't crash from incomplete wav files --- UI/BackgroundAudio.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/UI/BackgroundAudio.cpp b/UI/BackgroundAudio.cpp index 8e7ecc9fde..c990da8a68 100644 --- a/UI/BackgroundAudio.cpp +++ b/UI/BackgroundAudio.cpp @@ -148,6 +148,7 @@ void WavData::Read(RIFFReader &file_) { raw_data = (uint8_t *)malloc(numBytes); raw_data_size = numBytes; + if (num_channels == 1 || num_channels == 2) { file_.ReadData(raw_data, numBytes); } else { @@ -410,7 +411,11 @@ Sample *Sample::Load(const std::string &path) { samples[i] = ConvertU8ToI16(wave.raw_data[i]); } } - return new Sample(samples, wave.num_channels, wave.numFrames, wave.sample_rate); + + // Protect against bad metadata. + int actualFrames = std::min(wave.numFrames, wave.raw_data_size / wave.raw_bytes_per_frame); + + return new Sample(samples, wave.num_channels, actualFrames, wave.sample_rate); } static inline int16_t Clamp16(int32_t sample) {