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