Fix integer overflow.

Bug: chromium:1172583
Change-Id: I72c6c07f6f5702311c1a73eb4551e92a34c87e47
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/205007
Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33127}
This commit is contained in:
Jakob Ivarsson
2021-02-01 17:09:33 +01:00
committed by Commit Bot
parent 78f87ab106
commit e7ded686d5
2 changed files with 5 additions and 5 deletions

View File

@ -35,14 +35,13 @@ void BufferLevelFilter::Update(size_t buffer_size_samples,
// |level_factor_| and |filtered_current_level_| are in Q8.
// |buffer_size_samples| is in Q0.
const int64_t filtered_current_level =
((level_factor_ * int64_t{filtered_current_level_}) >> 8) +
((256 - level_factor_) * rtc::dchecked_cast<int>(buffer_size_samples));
(level_factor_ * int64_t{filtered_current_level_} >> 8) +
(256 - level_factor_) * rtc::dchecked_cast<int64_t>(buffer_size_samples);
// Account for time-scale operations (accelerate and pre-emptive expand) and
// make sure that the filtered value remains non-negative.
filtered_current_level_ = rtc::saturated_cast<int>(std::max<int64_t>(
0,
filtered_current_level - (int64_t{time_stretched_samples} * (1 << 8))));
0, filtered_current_level - int64_t{time_stretched_samples} * (1 << 8)));
}
void BufferLevelFilter::SetFilteredBufferLevel(int buffer_size_samples) {

View File

@ -12,6 +12,7 @@
#define MODULES_AUDIO_CODING_NETEQ_BUFFER_LEVEL_FILTER_H_
#include <stddef.h>
#include <stdint.h>
#include "rtc_base/constructor_magic.h"
@ -39,7 +40,7 @@ class BufferLevelFilter {
// Returns filtered current level in number of samples.
virtual int filtered_current_level() const {
// Round to nearest whole sample.
return (filtered_current_level_ + (1 << 7)) >> 8;
return (int64_t{filtered_current_level_} + (1 << 7)) >> 8;
}
private: