// 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/desktop_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);
  // Don't fuzz the filename for the desktop file, FilePath will DCHECK on
  // non-absolute file paths and we also don't want to do recursion and mess up
  // other parts of the filesystem either by writing to random paths.
  base::FilePath desktop_file_path(
      env.temp_dir_.GetPath().Append("fuzz.desktop"));
  // 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(desktop_file_path, file_contents.c_str(),
                  file_contents.size());

  std::unique_ptr<vm_tools::garcon::DesktopFile> desktop_file =
      vm_tools::garcon::DesktopFile::ParseDesktopFile(desktop_file_path);

  // If it was valid, fuzz it further.
  if (desktop_file) {
    desktop_file->GenerateExecutableFileName();
    std::vector<std::string> exec_args;
    size_t random_arg_count = data_provider.ConsumeIntegralInRange(1, 16);
    for (int i = 0; i < random_arg_count; ++i) {
      exec_args.push_back(data_provider.ConsumeRandomLengthString(128));
    }
    desktop_file->GenerateArgvWithFiles(exec_args);
  }
  return 0;
}
