From 6ea771933d0aacd32491c19614fe89392be49a15 Mon Sep 17 00:00:00 2001 From: Johannes Kron Date: Mon, 24 Sep 2018 17:19:52 +0200 Subject: [PATCH] Potential bug in RTP packet. A potential bug was introduced in "Refactor to remove direct memory dependency on kMaxId" due to a memory restructuring, commit c5744b8b21b627213286f1b6f2c65da5df9ce8d0 Bug: webrtc:7990 Change-Id: I0dcaf47e1c1e361d65220c278a2326d6f2686af7 Reviewed-on: https://webrtc-review.googlesource.com/101642 Reviewed-by: Danil Chapovalov Commit-Queue: Johannes Kron Cr-Commit-Position: refs/heads/master@{#24814} --- modules/rtp_rtcp/source/rtp_packet.cc | 5 +---- modules/rtp_rtcp/source/rtp_packet_unittest.cc | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) 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,