1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:28:11 +00:00

LibAudio: Prevent overflow in QOA LMS prediction

This commit is contained in:
kleines Filmröllchen 2023-08-20 18:08:52 +02:00 committed by Andrew Kaster
parent ede8582def
commit 24f5914d18

View file

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