diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc index f2a9709ca4..dec797d686 100644 --- a/modules/rtp_rtcp/source/rtp_packet.cc +++ b/modules/rtp_rtcp/source/rtp_packet.cc @@ -499,11 +499,15 @@ bool RtpPacket::ParseBuffer(const uint8_t* buffer, size_t size) { << "Duplicate rtp header extension id " << id << ". Overwriting."; } - extensions_size_ += kOneByteHeaderSize; - extension_entries_[idx].offset = - rtc::dchecked_cast(extension_offset + extensions_size_); - extension_entries_[idx].length = rtc::dchecked_cast(length); - extensions_size_ += length; + size_t offset = + extension_offset + extensions_size_ + kOneByteHeaderSize; + if (!rtc::IsValueInRangeForNumericType(offset)) { + RTC_DLOG(LS_WARNING) << "Oversized rtp header extension."; + break; + } + extension_entries_[idx].offset = static_cast(offset); + extension_entries_[idx].length = length; + extensions_size_ += kOneByteHeaderSize + length; } } payload_offset_ = extension_offset + extensions_capacity; diff --git a/test/fuzzers/corpora/rtp-corpus/rtp-5 b/test/fuzzers/corpora/rtp-corpus/rtp-5 new file mode 100644 index 0000000000..7dd6632007 Binary files /dev/null and b/test/fuzzers/corpora/rtp-corpus/rtp-5 differ