Make UBSan warnings fatal and fix the existing ones
The warnings were (all signed integer overflow):
webrtc/common_audio/signal_processing/levinson_durbin.c:46:25
12 * 268435456 cannot be represented in type 'int'
webrtc/modules/audio_processing/aecm/aecm_core.cc:930:69
522240 * 6115 cannot be represented in type 'int'
webrtc/modules/audio_processing/aecm/aecm_core_c.cc:455:36
72293096 * 50 cannot be represented in type 'int'
webrtc/modules/pacing/alr_detector.cc:70:48
1000000000 * 65 cannot be represented in type 'int'
webrtc/modules/rtp_rtcp/source/rtp_sender.cc:947:20
1929277286 + 321546521 cannot be represented in type 'int'
BUG=webrtc:8195
Review-Url: https://codereview.webrtc.org/3005003002
Cr-Original-Commit-Position: refs/heads/master@{#19670}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: ba09f79ba31c543d0dcf3a6d824992685087005a
diff --git a/modules/audio_processing/aecm/aecm_core.cc b/modules/audio_processing/aecm/aecm_core.cc
index 0e0b6ff..5809154 100644
--- a/modules/audio_processing/aecm/aecm_core.cc
+++ b/modules/audio_processing/aecm/aecm_core.cc
@@ -24,6 +24,7 @@
}
#include "webrtc/rtc_base/checks.h"
+#include "webrtc/rtc_base/safe_conversions.h"
#include "webrtc/typedefs.h"
#ifdef AEC_DEBUG
@@ -927,8 +928,8 @@
{
// We need to shift down before multiplication
shiftChFar = 32 - zerosCh - zerosFar;
- tmpU32no1 = (aecm->channelAdapt32[i] >> shiftChFar) *
- far_spectrum[i];
+ tmpU32no1 = rtc::dchecked_cast<uint32_t>(
+ aecm->channelAdapt32[i] >> shiftChFar) * far_spectrum[i];
}
// Determine Q-domain of numerator
zerosNum = WebRtcSpl_NormU32(tmpU32no1);
diff --git a/modules/pacing/alr_detector.cc b/modules/pacing/alr_detector.cc
index 7d62b21..6873210 100644
--- a/modules/pacing/alr_detector.cc
+++ b/modules/pacing/alr_detector.cc
@@ -67,8 +67,9 @@
void AlrDetector::SetEstimatedBitrate(int bitrate_bps) {
RTC_DCHECK(bitrate_bps);
- alr_budget_.set_target_rate_kbps(bitrate_bps * bandwidth_usage_percent_ /
- (1000 * 100));
+ const auto target_rate_kbps = int64_t{bitrate_bps} *
+ bandwidth_usage_percent_ / (1000 * 100);
+ alr_budget_.set_target_rate_kbps(rtc::dchecked_cast<int>(target_rate_kbps));
}
rtc::Optional<int64_t> AlrDetector::GetApplicationLimitedRegionStartTime()
diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc
index 8608759..6fd7600 100644
--- a/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/modules/rtp_rtcp/source/rtp_sender.cc
@@ -936,7 +936,7 @@
return;
uint32_t ssrc;
- int avg_delay_ms = 0;
+ int64_t avg_delay_ms = 0;
int max_delay_ms = 0;
{
rtc::CritScope lock(&send_critsect_);
@@ -962,8 +962,8 @@
return;
avg_delay_ms = (avg_delay_ms + num_delays / 2) / num_delays;
}
- send_side_delay_observer_->SendSideDelayUpdated(avg_delay_ms, max_delay_ms,
- ssrc);
+ send_side_delay_observer_->SendSideDelayUpdated(
+ rtc::dchecked_cast<int>(avg_delay_ms), max_delay_ms, ssrc);
}
void RTPSender::UpdateOnSendPacket(int packet_id,