blob: 6ed4137ae0ab0c438434765a1f02f53ca3ecff58 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "libipp/ipp.h"
#include <cstdint>
#include <fuzzer/FuzzedDataProvider.h>
#include <limits>
#include <vector>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FuzzedDataProvider fuzz_data(data, size);
const bool is_client = fuzz_data.ConsumeBool();
const ipp::Operation oper_id =
static_cast<ipp::Operation>(fuzz_data.ConsumeIntegral<uint16_t>());
const std::string packet_str = fuzz_data.ConsumeRemainingBytesAsString();
const std::vector<uint8_t> packet_bytes(packet_str.begin(), packet_str.end());
if (is_client) {
ipp::Client client;
client.ReadResponseFrameFrom(packet_bytes);
auto response = ipp::Response::NewResponse(oper_id);
if (response == nullptr)
response = std::make_unique<ipp::Response>(oper_id);
client.ParseResponseAndSaveTo(response.get());
} else {
ipp::Server server;
server.ReadRequestFrameFrom(packet_bytes);
auto request = ipp::Request::NewRequest(oper_id);
if (request == nullptr)
request = std::make_unique<ipp::Request>(oper_id);
server.ParseRequestAndSaveTo(request.get());
}
return 0;
}