From 624c33578f41dc6d4d0415bd91572e461c59014b Mon Sep 17 00:00:00 2001 From: brandtr Date: Thu, 1 Sep 2016 05:01:56 -0700 Subject: [PATCH] Fix off-by-one error in DCHECK in ProducerFec. BUG=chromium:642743 Review-Url: https://codereview.webrtc.org/2294243005 Cr-Commit-Position: refs/heads/master@{#14018} --- webrtc/modules/rtp_rtcp/source/producer_fec.cc | 2 +- .../rtp_rtcp/source/producer_fec_unittest.cc | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/webrtc/modules/rtp_rtcp/source/producer_fec.cc b/webrtc/modules/rtp_rtcp/source/producer_fec.cc index b928020df3..941773e6e3 100644 --- a/webrtc/modules/rtp_rtcp/source/producer_fec.cc +++ b/webrtc/modules/rtp_rtcp/source/producer_fec.cc @@ -57,7 +57,7 @@ void RedPacket::CreateHeader(const uint8_t* rtp_header, size_t header_length, int red_payload_type, int payload_type) { - RTC_DCHECK_LT(header_length + kRedForFecHeaderLength, length_); + RTC_DCHECK_LE(header_length + kRedForFecHeaderLength, length_); memcpy(data_.get(), rtp_header, header_length); // Replace payload type. data_[1] &= 0x80; diff --git a/webrtc/modules/rtp_rtcp/source/producer_fec_unittest.cc b/webrtc/modules/rtp_rtcp/source/producer_fec_unittest.cc index 8b84cf5712..e3a49b43cc 100644 --- a/webrtc/modules/rtp_rtcp/source/producer_fec_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/producer_fec_unittest.cc @@ -185,4 +185,22 @@ TEST_F(ProducerFecTest, BuildRedPacket) { delete packet; } +TEST_F(ProducerFecTest, BuildRedPacketWithEmptyPayload) { + constexpr size_t kNumFrames = 1; + constexpr size_t kPayloadLength = 0; + constexpr size_t kRedForFecHeaderLength = 1; + + generator_.NewFrame(kNumFrames); + std::unique_ptr packet( + generator_.NextPacket(0, kPayloadLength)); + std::unique_ptr red_packet = + ProducerFec::BuildRedPacket(packet->data, packet->length - kRtpHeaderSize, + kRtpHeaderSize, kRedPayloadType); + EXPECT_EQ(packet->length + kRedForFecHeaderLength, red_packet->length()); + VerifyHeader(packet->header.header.sequenceNumber, + packet->header.header.timestamp, kRedPayloadType, + packet->header.header.payloadType, red_packet.get(), + true); // Marker bit set. +} + } // namespace webrtc