# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Individual libfuzzer tests that didn't find their home yet.

import("//build/config/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//third_party/protobuf/proto_library.gni")

# root BUILD depends on this target. Needed for package discovery
group("fuzzers") {
}

fuzzer_test("empty_fuzzer") {
  sources = [
    "empty_fuzzer.cc",
  ]
  additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
}

fuzzer_test("courgette_fuzzer") {
  sources = [
    "courgette_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//courgette:courgette_lib",
  ]
  additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
}

fuzzer_test("language_detection_fuzzer") {
  sources = [
    "language_detection_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//components/translate/core/language_detection:language_detection",
  ]
}

fuzzer_test("snappy_fuzzer") {
  sources = [
    "snappy_fuzzer.cc",
  ]
  deps = [
    "//third_party/snappy:snappy",
  ]
}

fuzzer_test("template_url_parser_fuzzer") {
  sources = [
    "template_url_parser_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//components/search_engines:search_engines",
  ]
  dict = "dicts/xml.dict"
  libfuzzer_options = [ "max_len=4096" ]
}

fuzzer_test("url_parse_proto_fuzzer") {
  sources = [
    "url_parse_proto_fuzzer.cc",
  ]
  deps = [
    ":url_proto",
    "//base",
    "//base:i18n",
    "//third_party/libprotobuf-mutator",
    "//url:url",
  ]
}

proto_library("url_proto") {
  sources = [
    "url.proto",
  ]
}

fuzzer_test("usrsctp_fuzzer") {
  sources = [
    "usrsctp_fuzzer.cc",
  ]
  deps = [
    "//third_party/usrsctp",
  ]
}

fuzzer_test("libsrtp_fuzzer") {
  sources = [
    "libsrtp_fuzzer.cc",
  ]
  deps = [
    "//third_party/libsrtp",
  ]
  libfuzzer_options = [ "max_len=1500" ]
}

libpng_seed_corpuses = [
  "//components/viz/test/data",
  "//third_party/WebKit/LayoutTests/images/png-suite/samples",
  "//third_party/WebKit/LayoutTests/images/resources/pngfuzz",
]

fuzzer_test("gfx_png_image_fuzzer") {
  sources = [
    "gfx_png_image_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//ui/gfx",
  ]
  dict = "dicts/png.dict"
  seed_corpuses = libpng_seed_corpuses
}

fuzzer_test("libxml_xml_read_memory_fuzzer") {
  sources = [
    "libxml_xml_read_memory_fuzzer.cc",
  ]
  deps = [
    "//third_party/libxml:libxml",
  ]
  dict = "dicts/generated/libxml_xml_read_memory_fuzzer.dict"
}

fuzzer_test("libpng_read_fuzzer") {
  sources = [
    "libpng_read_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//third_party/libpng",
  ]
  dict = "dicts/png.dict"
  seed_corpuses = libpng_seed_corpuses
}

fuzzer_test("libpng_progressive_read_fuzzer") {
  sources = [
    "libpng_read_fuzzer.cc",
  ]
  defines = [ "PNG_FUZZ_PROGRESSIVE" ]
  deps = [
    "//base",
    "//third_party/libpng",
  ]
  dict = "dicts/png.dict"
  seed_corpuses = libpng_seed_corpuses
}

fuzzer_test("v8_script_parser_fuzzer") {
  sources = []
  deps = [
    "//v8:parser_fuzzer",
  ]
  dict = "dicts/generated/javascript.dict"
  seed_corpus = "//v8/test/mjsunit/regress/"
  libfuzzer_options = [ "only_ascii=1" ]
}

fuzzer_test("v8_json_parser_fuzzer") {
  sources = []
  deps = [
    "//v8:json_fuzzer",
  ]
  dict = "dicts/json.dict"
}

fuzzer_test("v8_regexp_parser_fuzzer") {
  sources = []
  deps = [
    "//v8:regexp_fuzzer",
  ]
  dict = "dicts/regexp.dict"
  seed_corpus = "//v8/test/fuzzer/regexp/"
  libfuzzer_options = [ "max_len=64" ]
}

fuzzer_test("v8_regexp_builtins_fuzzer") {
  sources = []
  deps = [
    "//v8:regexp_builtins_fuzzer",
  ]
}

fuzzer_test("v8_multi_return_fuzzer") {
  sources = []
  deps = [
    "//v8:multi_return_fuzzer",
  ]
}

fuzzer_test("v8_wasm_code_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_code_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_compile_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_compile_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_fuzzer",
  ]
  dict = "dicts/v8_wasm.dict"
  seed_corpus = "//v8/test/fuzzer/wasm_corpus/"
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_async_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_async_fuzzer",
  ]
  dict = "dicts/v8_wasm.dict"
  seed_corpus = "//v8/test/fuzzer/wasm_corpus/"
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_data_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_data_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_function_sigs_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_function_sigs_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_globals_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_globals_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_imports_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_imports_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_memory_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_memory_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_names_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_names_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("v8_wasm_types_section_fuzzer") {
  sources = []
  deps = [
    "//v8:wasm_types_section_fuzzer",
  ]
  libfuzzer_options = [ "max_len=500" ]
}

fuzzer_test("convert_woff2ttf_fuzzer") {
  sources = [
    "convert_woff2ttf_fuzzer.cc",
  ]
  deps = [
    "//third_party/woff2:woff2_dec",
  ]
  seed_corpus = "//testing/libfuzzer/fuzzers/woff2_corpus"
  libfuzzer_options = [ "max_len=803500" ]
}

fuzzer_test("flatbuffers_verifier_fuzzer") {
  sources = [
    "flatbuffers_verifier_fuzzer.cc",
  ]
  deps = [
    "//third_party/flatbuffers",
    "//third_party/flatbuffers:flatbuffers_samplebuffer",
  ]
  libfuzzer_options = [ "max_len=1024" ]
  seed_corpus = "//testing/libfuzzer/fuzzers/flatbuffers_corpus"
}

fuzzer_test("skia_path_fuzzer") {
  sources = [
    "skia_path_common.cc",
    "skia_path_common.h",
    "skia_path_fuzzer.cc",
  ]
  deps = [
    "//skia",
  ]
  libfuzzer_options = [ "max_len=256" ]
  if (is_debug) {
    # Disabled due to crashing on SkASSERT (crbug.com/642750, crbug.com/643275).
    additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
  }
}

fuzzer_test("skia_pathop_fuzzer") {
  sources = [
    "skia_path_common.cc",
    "skia_path_common.h",
    "skia_pathop_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//skia",
  ]
  libfuzzer_options = [ "max_len=512" ]
  if (is_debug) {
    # Disabled due to crashing on SkASSERT (crbug.com/642750, crbug.com/643275).
    additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
  }
}

fuzzer_test("skia_color_space_fuzzer") {
  sources = [
    "color_space_data.h",
    "skia_color_space_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//skia",
  ]
  dict = "dicts/icc.dict"
  libfuzzer_options = [ "max_len=4194304" ]
}

fuzzer_test("prtime_fuzzer") {
  sources = [
    "prtime_fuzzer.cc",
  ]
  deps = [
    "//base",
  ]
  dict = "dicts/prtime.dict"
  libfuzzer_options = [ "max_len=1024" ]
}

fuzzer_test("angle_translator_fuzzer") {
  sources = []
  deps = [
    "//third_party/angle:translator_fuzzer",
  ]
  libfuzzer_options = [ "max_len=1000" ]
  dict = "dicts/webgl-glsl.dict"
}

if (target_cpu == "x86" || target_cpu == "x64") {
  fuzzer_test("swiftshader_vertex_routine_fuzzer") {
    sources = []
    deps = [
      "//third_party/swiftshader:vertex_routine_fuzzer",
    ]
  }
}

fuzzer_test("sha1_fuzzer") {
  sources = [
    "sha1_fuzzer.cc",
  ]
  deps = [
    "//base",
  ]
}

fuzzer_test("hash_fuzzer") {
  sources = [
    "hash_fuzzer.cc",
  ]
  deps = [
    "//base",
  ]
}

# third_party/minizip/src is checked out only on unix platform by gclient.
if (is_linux) {
  fuzzer_test("minizip_uncompress_fuzzer") {
    sources = [
      "minizip_uncompress_fuzzer.cc",
    ]
    deps = [
      "//third_party/minizip:minizip",
    ]
    seed_corpus = "//testing/libfuzzer/fuzzers/minizip_uncompress_corpus"
  }

  fuzzer_test("minizip_compress_fuzzer") {
    sources = [
      "minizip_compress_fuzzer.cc",
    ]
    deps = [
      "//third_party/minizip:minizip",
    ]
  }
}

action("gen_javascript_parser_proto") {
  # Only targets in this file and the top-level visibility target can
  # depend on this.
  visibility = [
    ":*",
    "//:gn_visibility",
  ]

  script = "generate_javascript_parser_proto.py"

  sources = [
    "dicts/javascript_parser_proto.dict",
  ]

  outputs = [
    "$target_gen_dir/javascript_parser.proto",
    "$target_gen_dir/javascript_parser_proto_to_string.cc",
  ]

  args = rebase_path(outputs, root_build_dir) +
         rebase_path(sources, root_build_dir)
}

proto_library("javascript_parser_proto") {
  sources = [
    "$target_gen_dir/javascript_parser.proto",
  ]
  deps = [
    ":gen_javascript_parser_proto",
  ]
  proto_out_dir = ""
}

fuzzer_test("javascript_parser_proto_fuzzer") {
  sources = [
    "$target_gen_dir/javascript_parser_proto_to_string.cc",
    "javascript_parser_proto_fuzzer.cc",
    "javascript_parser_proto_to_string.h",
  ]
  deps = [
    ":gen_javascript_parser_proto",
    ":javascript_parser_proto",
    "//third_party/libprotobuf-mutator",
    "//v8:v8",
    "//v8:v8_libplatform",
  ]
  include_dirs = [ "$root_build_dir/$target_gen_dir" ]
}

fuzzer_test("v8_fully_instrumented_fuzzer") {
  sources = [
    "v8_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//v8:v8",
    "//v8:v8_libplatform",
  ]
  dict = "dicts/generated/javascript.dict"
  libfuzzer_options = [ "only_ascii=1" ]
}

if (!is_win) {
  fuzzer_test("skia_image_filter_proto_fuzzer") {
    sources = [
      "skia_image_filter_proto_fuzzer.cc",
    ]

    deps = [
      "//base",
      "//base/test:test_support",
      "//skia",
      "//testing/libfuzzer/proto:skia_image_filter_converter",
      "//testing/libfuzzer/proto:skia_image_filter_proto",
      "//third_party/libprotobuf-mutator",
    ]
  }
}
