1 // Copyright 2019 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "libipp/ipp.h" 6 7 #include <cstdint> 8 #include <limits> 9 #include <vector> 10 11 #include "base/test/fuzzed_data_provider.h" 12 LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)13extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 14 base::FuzzedDataProvider fuzz_data(data, size); 15 const bool is_client = fuzz_data.ConsumeBool(); 16 const ipp::Operation oper_id = 17 static_cast<ipp::Operation>(fuzz_data.ConsumeUint16()); 18 const std::string packet_str = fuzz_data.ConsumeRemainingBytes(); 19 const std::vector<uint8_t> packet_bytes(packet_str.begin(), packet_str.end()); 20 21 if (is_client) { 22 ipp::Client client; 23 client.ReadResponseFrameFrom(packet_bytes); 24 auto response = ipp::Response::NewResponse(oper_id); 25 if (response == nullptr) 26 response = std::make_unique<ipp::Response>(oper_id); 27 client.ParseResponseAndSaveTo(response.get()); 28 } else { 29 ipp::Server server; 30 server.ReadRequestFrameFrom(packet_bytes); 31 auto request = ipp::Request::NewRequest(oper_id); 32 if (request == nullptr) 33 request = std::make_unique<ipp::Request>(oper_id); 34 server.ParseRequestAndSaveTo(request.get()); 35 } 36 37 return 0; 38 } 39