From 29a3f928f9ab8b12d19eeb67d25b828148f75bca Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Thu, 12 Dec 2024 18:23:23 +0100 Subject: [PATCH] In PacketBuffer do not attempt to clear before 1st packet ClearTo logic relies on clear to sequence number follows first_seq_num_ Bug: chromium:370689424 Change-Id: I12874d5ce7adfdcf9c0691acacdd2b8ae41ce307 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/371320 Commit-Queue: Danil Chapovalov Reviewed-by: Rasmus Brandt Cr-Commit-Position: refs/heads/main@{#43558} --- modules/video_coding/packet_buffer.cc | 3 +-- modules/video_coding/packet_buffer_unittest.cc | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/video_coding/packet_buffer.cc b/modules/video_coding/packet_buffer.cc index 9d7b6e550c..df53e81685 100644 --- a/modules/video_coding/packet_buffer.cc +++ b/modules/video_coding/packet_buffer.cc @@ -129,8 +129,7 @@ PacketBuffer::InsertResult PacketBuffer::InsertPacket( void PacketBuffer::ClearTo(uint16_t seq_num) { // We have already cleared past this sequence number, no need to do anything. - if (is_cleared_to_first_seq_num_ && - AheadOf(first_seq_num_, seq_num)) { + if (AheadOf(first_seq_num_, seq_num)) { return; } diff --git a/modules/video_coding/packet_buffer_unittest.cc b/modules/video_coding/packet_buffer_unittest.cc index 925d8f2876..6c05d09277 100644 --- a/modules/video_coding/packet_buffer_unittest.cc +++ b/modules/video_coding/packet_buffer_unittest.cc @@ -839,6 +839,13 @@ TEST_F(PacketBufferH264FrameGap, SizeIs(2)); } +TEST_F(PacketBufferH264FrameGap, DoesntCrashWhenTryToClearBefore1stPacket) { + // Test scenario copied from the https://issues.chromium.org/370689424 + InsertH264(41087, kKeyFrame, kNotFirst, kNotLast, 123, 0, 0, false); + packet_buffer_.ClearTo(30896); + InsertH264(32896, kKeyFrame, kFirst, kLast, 123, 0, 0, false); +} + } // namespace } // namespace video_coding } // namespace webrtc