Fix crash in PacketArrivalMap::EraseTo() when using missing seq number

There was a DCHECK in PacketArrivalMap::EraseTo() that the
seqeuence number that is used as argument has been received.
However, this is not necessarily the case since it's cleared upon
a request of a feedback report from the sender.

Bug: webrtc:14679
Change-Id: I908b4bf1f2a4355593f0a361e1733fc91527366d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/283741
Commit-Queue: Johannes Kron <kron@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38755}
This commit is contained in:
Johannes Kron
2022-11-17 12:51:54 +00:00
committed by WebRTC LUCI CQ
parent ef7618a8f9
commit c5aac4ec1f
2 changed files with 23 additions and 1 deletions

View File

@ -151,7 +151,6 @@ void PacketArrivalTimeMap::EraseTo(int64_t sequence_number) {
}
// Remove some.
begin_sequence_number_ = sequence_number;
RTC_DCHECK(has_received(begin_sequence_number_));
AdjustToSize(end_sequence_number_ - begin_sequence_number_);
}

View File

@ -264,5 +264,28 @@ TEST(PacketArrivalMapTest, EraseAllRemembersBeginningSeqNbr) {
EXPECT_FALSE(map.has_received(51));
}
TEST(PacketArrivalMapTest, EraseToMissingSequenceNumber) {
PacketArrivalTimeMap map;
map.AddPacket(37, Timestamp::Millis(10));
map.AddPacket(39, Timestamp::Millis(11));
map.AddPacket(40, Timestamp::Millis(12));
map.AddPacket(41, Timestamp::Millis(13));
map.EraseTo(38);
map.AddPacket(42, Timestamp::Millis(40));
EXPECT_EQ(map.begin_sequence_number(), 38);
EXPECT_EQ(map.end_sequence_number(), 43);
EXPECT_FALSE(map.has_received(37));
EXPECT_FALSE(map.has_received(38));
EXPECT_TRUE(map.has_received(39));
EXPECT_TRUE(map.has_received(40));
EXPECT_TRUE(map.has_received(41));
EXPECT_TRUE(map.has_received(42));
}
} // namespace
} // namespace webrtc