From e3fc11464e5b295c53c897d3dcb4da0cdf10fc21 Mon Sep 17 00:00:00 2001 From: ivoc Date: Tue, 16 May 2017 07:13:15 -0700 Subject: [PATCH] Fixed NetEq overflow bug. Negating an int can result in a value that cannot be represented as an int. This is fixed here by using a 64 bit variable. BUG=chromium:663611 Review-Url: https://codereview.webrtc.org/2879863002 Cr-Commit-Position: refs/heads/master@{#18167} --- .../modules/audio_coding/neteq/decision_logic_normal.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/webrtc/modules/audio_coding/neteq/decision_logic_normal.cc b/webrtc/modules/audio_coding/neteq/decision_logic_normal.cc index c271bd969d..c5f2570758 100644 --- a/webrtc/modules/audio_coding/neteq/decision_logic_normal.cc +++ b/webrtc/modules/audio_coding/neteq/decision_logic_normal.cc @@ -97,14 +97,17 @@ Operations DecisionLogicNormal::CngOperation(Modes prev_mode, available_timestamp); int32_t optimal_level_samp = static_cast( (delay_manager_->TargetLevel() * packet_length_samples_) >> 8); - int32_t excess_waiting_time_samp = -timestamp_diff - optimal_level_samp; + const int64_t excess_waiting_time_samp = + -static_cast(timestamp_diff) - optimal_level_samp; if (excess_waiting_time_samp > optimal_level_samp / 2) { // The waiting time for this packet will be longer than 1.5 // times the wanted buffer delay. Apply fast-forward to cut the // waiting time down to the optimal. - noise_fast_forward_ += excess_waiting_time_samp; - timestamp_diff += excess_waiting_time_samp; + noise_fast_forward_ = rtc::dchecked_cast(noise_fast_forward_ + + excess_waiting_time_samp); + timestamp_diff = + rtc::saturated_cast(timestamp_diff + excess_waiting_time_samp); } if (timestamp_diff < 0 && prev_mode == kModeRfc3389Cng) {