diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc index 10d4143513..aa8eb107f6 100644 --- a/modules/rtp_rtcp/source/rtp_packet.cc +++ b/modules/rtp_rtcp/source/rtp_packet.cc @@ -343,10 +343,7 @@ bool RtpPacket::ParseBuffer(const uint8_t* buffer, size_t size) { } extensions_size_ = 0; - for (ExtensionInfo& location : extension_entries_) { - location.offset = 0; - location.length = 0; - } + extension_entries_.clear(); if (has_extension) { /* RTP header extension, RFC 3550. 0 1 2 3 diff --git a/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/modules/rtp_rtcp/source/rtp_packet_unittest.cc index e19f191439..0203cec988 100644 --- a/modules/rtp_rtcp/source/rtp_packet_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_packet_unittest.cc @@ -365,6 +365,22 @@ TEST(RtpPacketTest, ParseWith2Extensions) { EXPECT_EQ(kAudioLevel, audio_level); } +TEST(RtpPacketTest, ParseSecondPacketWithFewerExtensions) { + RtpPacketToSend::ExtensionManager extensions; + extensions.Register(kRtpExtensionTransmissionTimeOffset, + kTransmissionOffsetExtensionId); + extensions.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId); + RtpPacketReceived packet(&extensions); + EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL))); + EXPECT_TRUE(packet.HasExtension()); + EXPECT_TRUE(packet.HasExtension()); + + // Second packet without audio level. + EXPECT_TRUE(packet.Parse(kPacketWithTO, sizeof(kPacketWithTO))); + EXPECT_TRUE(packet.HasExtension()); + EXPECT_FALSE(packet.HasExtension()); +} + TEST(RtpPacketTest, ParseWithAllFeatures) { RtpPacketToSend::ExtensionManager extensions; extensions.Register(kRtpExtensionTransmissionTimeOffset,