From 6255a7f3a040b92223937e3ed3305dd3065781bb Mon Sep 17 00:00:00 2001 From: Jakob Ivarsson Date: Wed, 4 Sep 2024 12:45:50 +0000 Subject: [PATCH] Avoid negative timestamp in SourceTracker. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: b/364184684 Change-Id: If03cd697fed05c24549b9ef80bbaf9f11b47d8bc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361640 Reviewed-by: Danil Chapovalov Commit-Queue: Jakob Ivarsson‎ Cr-Commit-Position: refs/heads/main@{#42959} --- modules/rtp_rtcp/source/source_tracker.cc | 3 +++ modules/rtp_rtcp/source/source_tracker_unittest.cc | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/modules/rtp_rtcp/source/source_tracker.cc b/modules/rtp_rtcp/source/source_tracker.cc index 4d1f40641f..17862148eb 100644 --- a/modules/rtp_rtcp/source/source_tracker.cc +++ b/modules/rtp_rtcp/source/source_tracker.cc @@ -94,6 +94,9 @@ SourceTracker::SourceEntry& SourceTracker::UpdateEntry(const SourceKey& key) { } void SourceTracker::PruneEntries(Timestamp now) const { + if (now < Timestamp::Zero() + kTimeout) { + return; + } Timestamp prune = now - kTimeout; while (!list_.empty() && list_.back().second.timestamp < prune) { map_.erase(list_.back().first); diff --git a/modules/rtp_rtcp/source/source_tracker_unittest.cc b/modules/rtp_rtcp/source/source_tracker_unittest.cc index 32ac711ca5..749bfbaa41 100644 --- a/modules/rtp_rtcp/source/source_tracker_unittest.cc +++ b/modules/rtp_rtcp/source/source_tracker_unittest.cc @@ -535,4 +535,12 @@ TEST(SourceTrackerTest, TimedOutSourcesAreRemoved) { kRtpTimestamp1, extensions1))); } +TEST(SourceTrackerTest, AvoidNegativeTimestamp) { + SimulatedClock clock(Timestamp::Zero()); + SourceTracker tracker(&clock); + tracker.OnFrameDelivered(RtpPacketInfos( + {RtpPacketInfo(/*ssrc=*/111, /*csrcs=*/{}, /*rtp_timestamp=*/0, + /*receive_time=*/Timestamp::Zero())})); +} + } // namespace webrtc