1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker #include <memory> 12*d9f75844SAndroid Build Coastguard Worker #include <utility> 13*d9f75844SAndroid Build Coastguard Worker 14*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/frame_object.h" 15*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/packet_buffer.h" 16*d9f75844SAndroid Build Coastguard Worker #include "test/fuzzers/fuzz_data_helper.h" 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker namespace webrtc { 19*d9f75844SAndroid Build Coastguard Worker IgnoreResult(video_coding::PacketBuffer::InsertResult result)20*d9f75844SAndroid Build Coastguard Workervoid IgnoreResult(video_coding::PacketBuffer::InsertResult result) {} 21*d9f75844SAndroid Build Coastguard Worker FuzzOneInput(const uint8_t * data,size_t size)22*d9f75844SAndroid Build Coastguard Workervoid FuzzOneInput(const uint8_t* data, size_t size) { 23*d9f75844SAndroid Build Coastguard Worker if (size > 200000) { 24*d9f75844SAndroid Build Coastguard Worker return; 25*d9f75844SAndroid Build Coastguard Worker } 26*d9f75844SAndroid Build Coastguard Worker video_coding::PacketBuffer packet_buffer(8, 1024); 27*d9f75844SAndroid Build Coastguard Worker test::FuzzDataHelper helper(rtc::ArrayView<const uint8_t>(data, size)); 28*d9f75844SAndroid Build Coastguard Worker 29*d9f75844SAndroid Build Coastguard Worker while (helper.BytesLeft()) { 30*d9f75844SAndroid Build Coastguard Worker auto packet = std::make_unique<video_coding::PacketBuffer::Packet>(); 31*d9f75844SAndroid Build Coastguard Worker // Fuzz POD members of the packet. 32*d9f75844SAndroid Build Coastguard Worker helper.CopyTo(&packet->marker_bit); 33*d9f75844SAndroid Build Coastguard Worker helper.CopyTo(&packet->payload_type); 34*d9f75844SAndroid Build Coastguard Worker helper.CopyTo(&packet->seq_num); 35*d9f75844SAndroid Build Coastguard Worker helper.CopyTo(&packet->timestamp); 36*d9f75844SAndroid Build Coastguard Worker helper.CopyTo(&packet->times_nacked); 37*d9f75844SAndroid Build Coastguard Worker 38*d9f75844SAndroid Build Coastguard Worker // Fuzz non-POD member of the packet. 39*d9f75844SAndroid Build Coastguard Worker packet->video_payload.SetSize(helper.ReadOrDefaultValue<uint8_t>(0)); 40*d9f75844SAndroid Build Coastguard Worker // TODO(danilchap): Fuzz other non-POD members of the `packet`. 41*d9f75844SAndroid Build Coastguard Worker 42*d9f75844SAndroid Build Coastguard Worker IgnoreResult(packet_buffer.InsertPacket(std::move(packet))); 43*d9f75844SAndroid Build Coastguard Worker } 44*d9f75844SAndroid Build Coastguard Worker } 45*d9f75844SAndroid Build Coastguard Worker 46*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc 47