diff --git a/rtc_base/rate_statistics.cc b/rtc_base/rate_statistics.cc index b393dc863a..89f7e54a68 100644 --- a/rtc_base/rate_statistics.cc +++ b/rtc_base/rate_statistics.cc @@ -11,6 +11,7 @@ #include "rtc_base/rate_statistics.h" #include +#include #include #include "rtc_base/checks.h" @@ -91,7 +92,13 @@ absl::optional RateStatistics::Rate(int64_t now_ms) const { } float scale = scale_ / active_window_size; - return static_cast(accumulated_count_ * scale + 0.5f); + float result = accumulated_count_ * scale + 0.5f; + + // Better return unavailable rate than garbage value (undefined behavior). + if (result > std::numeric_limits::max()) { + return absl::nullopt; + } + return static_cast(result); } void RateStatistics::EraseOld(int64_t now_ms) {