From e130084c6870003ec6a8718c938bec62063a6a8a Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Mon, 13 Sep 2021 14:50:41 +0200 Subject: [PATCH] Fix integer overflow in rtcp::TransportFeedback::IsConsistent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:13141 Change-Id: I450d7ffbef86ce67b3e6fdde0520bdb6ac7d666c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231840 Reviewed-by: Åsa Persson Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#34979} --- .../rtp_rtcp/source/rtcp_packet/transport_feedback.cc | 2 +- .../source/rtcp_packet/transport_feedback_unittest.cc | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc b/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc index c309e7ce96..4b1ab9eb29 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 @@ bool TransportFeedback::IsConsistent() const { << 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 abaa0786a3..6003df45d0 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(RtcpPacketTest, TransportFeedbackTwoBitVectorFull) { 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[] = {