// 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 "arc/obb-mounter/mount_obb_fuse_main.h"

#include <cstddef>
#include <cstdint>
#include <fuse/fuse.h>
#include <string>

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

#include "arc/obb-mounter/volume.h"

namespace {

constexpr int kRandomIDMaxLength = 32;
constexpr int kRandomFilePathMaxLength = 128;

bool IgnoreLogging(int, const char*, int, size_t, const std::string&) {
  return true;
}

}  // namespace


class Environment {
 public:
  Environment() {
    // Need to disable logging
    logging::SetLogMessageHandler(&IgnoreLogging);
  }
};

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  static Environment env;
  FuzzedDataProvider data_provider(data, size);
  // Create string arguments first
  const std::string& mount_path =
    data_provider.ConsumeRandomLengthString(kRandomFilePathMaxLength);
  const std::string& owner_uid =
    data_provider.ConsumeRandomLengthString(kRandomIDMaxLength);
  const std::string& owner_gid =
    data_provider.ConsumeRandomLengthString(kRandomIDMaxLength);

  // Create a temporary directory to hold the created file
  base::ScopedTempDir temp_dir;
  CHECK(temp_dir.CreateUniqueTempDir());
  base::FilePath file_path = temp_dir.GetPath().Append("tmpFile");

  // Put all remaining bytes in the file.
  auto path = base::FilePath(file_path);
  base::File file(path,
                  base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
  if (!file.created()) {
    LOG(ERROR) << "Failed to create " << file_path.value();
    return 0;
  }

  const std::string& file_contents =
    data_provider.ConsumeRemainingBytesAsString();
  file.Write(0, file_contents.c_str(), file_contents.length());

  mount_obb_fuse_main(path.value(),
                      file_path.value(),
                      mount_path,
                      owner_uid,
                      owner_gid);

  return 0;
}
