| Index: webrtc/test/fuzzers/rtp_packet_fuzzer.cc
|
| diff --git a/webrtc/test/fuzzers/rtp_packet_fuzzer.cc b/webrtc/test/fuzzers/rtp_packet_fuzzer.cc
|
| index 7cf65cf655b1ab8a93b7ce5ebaa9eedceef46db9..64ab6ecd9e5a743ee54d523283cd2fe96dd69762 100644
|
| --- a/webrtc/test/fuzzers/rtp_packet_fuzzer.cc
|
| +++ b/webrtc/test/fuzzers/rtp_packet_fuzzer.cc
|
| @@ -14,30 +14,31 @@
|
|
|
| namespace webrtc {
|
|
|
| -// We decide which header extensions to register by reading one byte
|
| +// We decide which header extensions to register by reading two bytes
|
| // from the beginning of |data| and interpreting it as a bitmask over
|
| -// the RTPExtensionType enum. This assert ensures one byte is enough.
|
| -static_assert(kRtpExtensionNumberOfExtensions <= 8,
|
| +// the RTPExtensionType enum. This assert ensures two bytes are enough.
|
| +static_assert(kRtpExtensionNumberOfExtensions <= 16,
|
| "Insufficient bits read to configure all header extensions. Add "
|
| "an extra byte and update the switches.");
|
|
|
| void FuzzOneInput(const uint8_t* data, size_t size) {
|
| - if (size <= 1)
|
| + if (size <= 2)
|
| return;
|
|
|
| - // Don't use the configuration byte as part of the packet.
|
| - std::bitset<8> extensionMask(data[0]);
|
| - data++;
|
| - size--;
|
| + // Don't use the configuration bytes as part of the packet.
|
| + std::bitset<16> extensionMask(*reinterpret_cast<const uint16_t*>(data));
|
| + data += 2;
|
| + size -= 2;
|
|
|
| RtpPacketReceived::ExtensionManager extensions;
|
| - for (int i = 0; i < kRtpExtensionNumberOfExtensions; i++) {
|
| + // Skip i = 0 since it maps to ExtensionNone and extension id = 0 is invalid.
|
| + for (int i = 1; i < kRtpExtensionNumberOfExtensions; i++) {
|
| RTPExtensionType extension_type = static_cast<RTPExtensionType>(i);
|
| if (extensionMask[i] && extension_type != kRtpExtensionNone) {
|
| // Extensions are registered with an ID, which you signal to the
|
| // peer so they know what to expect. This code only cares about
|
| // parsing so the value of the ID isn't relevant; we use i.
|
| - extensions.Register(extension_type, i);
|
| + extensions.RegisterByType(i, extension_type);
|
| }
|
| }
|
|
|
| @@ -89,6 +90,16 @@ void FuzzOneInput(const uint8_t* data, size_t size) {
|
| VideoContentType content_type;
|
| packet.GetExtension<VideoContentTypeExtension>(&content_type);
|
| break;
|
| + case kRtpExtensionRtpStreamId: {
|
| + std::string rsid;
|
| + packet.GetExtension<RtpStreamId>(&rsid);
|
| + break;
|
| + }
|
| + case kRtpExtensionRepairedRtpStreamId: {
|
| + std::string rsid;
|
| + packet.GetExtension<RepairedRtpStreamId>(&rsid);
|
| + break;
|
| + }
|
| }
|
| }
|
| }
|
|
|