// Copyright (c) 2016-2017 The OTS 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 <stddef.h>
#include <stdint.h>
#ifndef OTS_FUZZER_NO_MAIN
#include <fstream>
#include <iostream>
#include <iterator>
#endif

#include "opentype-sanitiser.h"
#include "ots-memory-stream.h"
#include "ots.h"

// Entry point for LibFuzzer.
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  ots::OTSContext context;
  ots::ExpandingMemoryStream stream(size /*initial*/, size * 8 /*limit*/);
  bool ok = context.Process(&stream, data, size);

  if (ok) {
    ots::Buffer file(data, size);
    uint32_t tag;
    if (file.ReadU32(&tag) && tag == OTS_TAG('t','t','c','f')) {
      uint32_t num_fonts;
      if (file.Skip(sizeof(uint32_t)) && file.ReadU32(&num_fonts)) {
        for (uint32_t i = 0; i < num_fonts; i++) {
          stream.Seek(0);
          context.Process(&stream, data, size, i);
        }
      }
    }
  }

  return 0;
}

#ifndef OTS_FUZZER_NO_MAIN
int main(int argc, char **argv) {
  for (int i = 1; i < argc; i++) {
    std::cout << argv[i] << std::endl;

    std::ifstream f(argv[i], std::ifstream::binary);
    if (!f.good())
      return 1;

    std::string s((std::istreambuf_iterator<char>(f)),
                  (std::istreambuf_iterator<char>()));
    LLVMFuzzerTestOneInput((const uint8_t*)s.data(), s.size());
  }
  return 0;
}
#endif
