// Copyright 2021 The PDFium 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 <fuzzer/FuzzedDataProvider.h>

#include <memory>
#include <utility>
#include <vector>

#include "core/fpdfapi/font/cpdf_tounicodemap.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fxcrt/retain_ptr.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  static constexpr size_t kParameterSize = sizeof(uint32_t) + sizeof(wchar_t);
  if (size <= kParameterSize)
    return 0;

  // Limit data size to prevent fuzzer timeout.
  static constexpr size_t kMaxDataSize = 256 * 1024;
  if (size > kParameterSize + kMaxDataSize)
    return 0;

  FuzzedDataProvider data_provider(data, size);
  uint32_t charcode_to_lookup = data_provider.ConsumeIntegral<uint32_t>();
  wchar_t char_for_reverse_lookup = data_provider.ConsumeIntegral<wchar_t>();

  std::vector<uint8_t> remaining =
      data_provider.ConsumeRemainingBytes<uint8_t>();
  auto stream = pdfium::MakeRetain<CPDF_Stream>();
  stream->SetData(remaining);

  auto to_unicode_map = std::make_unique<CPDF_ToUnicodeMap>(std::move(stream));
  to_unicode_map->Lookup(charcode_to_lookup);
  to_unicode_map->ReverseLookup(char_for_reverse_lookup);
  return 0;
}
