Fix infinite loop in rtp packet parsing
when rtp header extension is larger than 2^16 bytes Bug: chromium:811613 Change-Id: I05b725d734dd628056d603b596d3523e827ddb54 Reviewed-on: https://webrtc-review.googlesource.com/52345 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Alex Loiko <aleloi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22003}
This commit is contained in:
parent
fdd4400ef4
commit
61405bcb19
@ -336,10 +336,11 @@ rtc::ArrayView<uint8_t> RtpPacket::AllocateRawExtension(int id, size_t length) {
|
|||||||
extension_entry->offset = rtc::dchecked_cast<uint16_t>(
|
extension_entry->offset = rtc::dchecked_cast<uint16_t>(
|
||||||
extensions_offset + extensions_size_ + kOneByteHeaderSize);
|
extensions_offset + extensions_size_ + kOneByteHeaderSize);
|
||||||
extension_entry->length = rtc::dchecked_cast<uint8_t>(length);
|
extension_entry->length = rtc::dchecked_cast<uint8_t>(length);
|
||||||
extensions_size_ = rtc::dchecked_cast<uint16_t>(new_extensions_size);
|
extensions_size_ = new_extensions_size;
|
||||||
|
|
||||||
// Update header length field.
|
// Update header length field.
|
||||||
uint16_t extensions_words = (extensions_size_ + 3) / 4; // Wrap up to 32bit.
|
uint16_t extensions_words = rtc::dchecked_cast<uint16_t>(
|
||||||
|
(extensions_size_ + 3) / 4); // Wrap up to 32bit.
|
||||||
ByteWriter<uint16_t>::WriteBigEndian(WriteAt(extensions_offset - 2),
|
ByteWriter<uint16_t>::WriteBigEndian(WriteAt(extensions_offset - 2),
|
||||||
extensions_words);
|
extensions_words);
|
||||||
// Fill extension padding place with zeroes.
|
// Fill extension padding place with zeroes.
|
||||||
|
|||||||
@ -157,7 +157,7 @@ class RtpPacket {
|
|||||||
size_t payload_size_;
|
size_t payload_size_;
|
||||||
|
|
||||||
ExtensionInfo extension_entries_[kMaxExtensionHeaders];
|
ExtensionInfo extension_entries_[kMaxExtensionHeaders];
|
||||||
uint16_t extensions_size_ = 0; // Unaligned.
|
size_t extensions_size_ = 0; // Unaligned.
|
||||||
rtc::CopyOnWriteBuffer buffer_;
|
rtc::CopyOnWriteBuffer buffer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
BIN
test/fuzzers/corpora/rtp-corpus/rtp-6
Normal file
BIN
test/fuzzers/corpora/rtp-corpus/rtp-6
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user