// 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 <stddef.h>
#include <stdint.h>

#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <base/logging.h>
#include <fuzzer/FuzzedDataProvider.h>

#include "vm_tools/garcon/icon_index_file.h"

class Environment {
 public:
  Environment() {
    // Disable logging.
    logging::SetMinLogLevel(logging::LOG_FATAL);
    // Setup temp dir for writing out the desktop file to parse.
    CHECK(temp_dir_.CreateUniqueTempDir());
  }

  base::ScopedTempDir temp_dir_;
};

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  static Environment env;
  FuzzedDataProvider data_provider(data, size);
  // The filename has no impact on this function's execution.
  base::FilePath index_file_path(env.temp_dir_.GetPath().Append("index.theme"));
  // We handle up to 10MB files in the code, but 16KB should be plenty for fuzz
  // testing.
  std::string file_contents = data_provider.ConsumeRandomLengthString(16384);
  base::WriteFile(index_file_path, file_contents.c_str(), file_contents.size());

  // This takes a dir name and then parses index.them inside that dir.
  std::unique_ptr<vm_tools::garcon::IconIndexFile> index_file =
      vm_tools::garcon::IconIndexFile::ParseIconIndexFile(
          env.temp_dir_.GetPath());

  // If it was valid, test it a little further. We will only be passing known
  // values into this, but the structure could become broken from fuzzing so
  // this is worth doing.
  if (index_file) {
    index_file->GetPathsForSizeAndScale(32, 1);
    index_file->GetPathsForSizeAndScale(128, 2);
  }
  return 0;
}
