diff --git a/Userland/Libraries/LibAudio/QOATypes.cpp b/Userland/Libraries/LibAudio/QOATypes.cpp index 7ebdac655f..eb239ddf1b 100644 --- a/Userland/Libraries/LibAudio/QOATypes.cpp +++ b/Userland/Libraries/LibAudio/QOATypes.cpp @@ -38,10 +38,11 @@ LMSState::LMSState(u64 history_packed, u64 weights_packed) i32 LMSState::predict() const { - i32 prediction = 0; + // The spec specifies that overflows are not allowed, but we do a safe thing anyways. + Checked prediction = 0; for (size_t i = 0; i < lms_history; ++i) - prediction += history[i] * weights[i]; - return prediction >> 13; + prediction.saturating_add(Checked::saturating_mul(history[i], weights[i])); + return prediction.value() >> 13; } void LMSState::update(i32 sample, i32 residual)