// Copyright 2018 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 <stdint.h>

#include <fuzzer/FuzzedDataProvider.h>

#include "shill/cellular/cellular_pco.h"

#include <base/logging.h>

namespace shill {
namespace {

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  // Turn off logging.
  logging::SetMinLogLevel(logging::LOG_FATAL);

  FuzzedDataProvider data_provider(data, size);

  // Prepare a few random elements to search for.
  std::vector<uint16_t> elements(
      data_provider.ConsumeIntegralInRange<uint32_t>(0, 10));
  for (size_t i = 0; i < elements.size(); i++)
    elements[i] = data_provider.ConsumeIntegral<uint16_t>();

  const std::string& str = data_provider.ConsumeRemainingBytesAsString();
  const std::vector<uint8_t> raw_data(str.begin(), str.end());
  std::unique_ptr<CellularPco> pco = CellularPco::CreateFromRawData(raw_data);

  if (pco)
    for (auto e : elements)
      pco->FindElement(e);

  return 0;
}

}  // namespace
}  // namespace shill
