diff --git a/src/core/hle/service/audio/hwopus.cpp b/src/core/hle/service/audio/hwopus.cpp index 66b33a0cbc..371cd4997d 100644 --- a/src/core/hle/service/audio/hwopus.cpp +++ b/src/core/hle/service/audio/hwopus.cpp @@ -56,6 +56,7 @@ private: bool Decoder_DecodeInterleaved(u32& consumed, u32& sample_count, const std::vector& input, std::vector& output) { + size_t raw_output_sz = output.size() * sizeof(opus_int16); if (sizeof(OpusHeader) > input.size()) return false; OpusHeader hdr{}; @@ -67,11 +68,11 @@ private: auto decoded_sample_count = opus_packet_get_nb_samples( frame, static_cast(input.size() - sizeof(OpusHeader)), static_cast(sample_rate)); - if (decoded_sample_count * channel_count * sizeof(u16) > output.size()) + if (decoded_sample_count * channel_count * sizeof(u16) > raw_output_sz) return false; auto out_sample_count = opus_decode(decoder.get(), frame, hdr.sz, output.data(), - (static_cast(output.size() / sizeof(s16) / channel_count)), 0); + (static_cast(raw_output_sz / sizeof(s16) / channel_count)), 0); if (out_sample_count < 0) return false; sample_count = out_sample_count;