Fix integer overflow in rtcp::TransportFeedback::IsConsistent
Bug: webrtc:13141
Change-Id: I450d7ffbef86ce67b3e6fdde0520bdb6ac7d666c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231840
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34979}
diff --git a/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc b/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc
index c309e7c..4b1ab9e 100644
--- a/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc
+++ b/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc
@@ -549,7 +549,7 @@
<< num_seq_no_;
return false;
}
- int64_t timestamp_us = base_time_ticks_ * kBaseScaleFactor;
+ int64_t timestamp_us = GetBaseTimeUs();
auto packet_it = received_packets_.begin();
uint16_t seq_no = base_seq_no_;
for (DeltaSize delta_size : delta_sizes) {
diff --git a/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc b/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc
index abaa078..6003df4 100644
--- a/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_packet/transport_feedback_unittest.cc
@@ -232,6 +232,15 @@
test.VerifyPacket();
}
+TEST(RtcpPacketTest, TransportFeedbackWithLargeBaseTimeIsConsistent) {
+ TransportFeedback tb;
+ constexpr int64_t kTimestampUs =
+ int64_t{0x7fff'ffff} * TransportFeedback::kDeltaScaleFactor;
+ tb.SetBase(/*base_sequence=*/0, /*ref_timestamp_us=*/kTimestampUs);
+ tb.AddReceivedPacket(/*base_sequence=*/0, /*ref_timestamp_us=*/kTimestampUs);
+ EXPECT_TRUE(tb.IsConsistent());
+}
+
TEST(RtcpPacketTest, TransportFeedbackLargeAndNegativeDeltas) {
const uint16_t kReceived[] = {1, 2, 6, 7, 8};
const int64_t kReceiveTimes[] = {