# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# PDFium fuzzers.
# When adding a fuzzer_test target make sure to add it to the group
# 'pdf_fuzzers'
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
import("//third_party/pdfium/pdfium.gni")
import("//third_party/protobuf/proto_library.gni")
template("pdfium_fuzzer_test") {
fuzzer_test(target_name) {
forward_variables_from(invoker, "*", [ "deps" ])
sources = [ "initialize_process.cc" ]
deps = [
"//base",
"//base/test:test_support",
]
deps += [ "//third_party/pdfium/testing/fuzzers:${target_name}_src" ]
if (is_component_build) {
deps += [ "//third_party/pdfium/testing/fuzzers:${target_name}_impl" ]
}
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}
group("fuzzers") {
}
group("pdf_fuzzers") {
testonly = true
deps = [
":pdf_cmap_fuzzer",
":pdf_codec_a85_fuzzer",
":pdf_codec_fax_fuzzer",
":pdf_codec_icc_fuzzer",
":pdf_codec_jbig2_fuzzer",
":pdf_codec_rle_fuzzer",
":pdf_font_fuzzer",
":pdf_hint_table_fuzzer",
":pdf_jpx_fuzzer",
":pdf_psengine_fuzzer",
":pdf_scanlinecompositor_fuzzer",
":pdf_streamparser_fuzzer",
":pdf_xml_fuzzer",
":pdfium_fuzzer",
]
if (pdf_enable_v8) {
deps += [
":pdf_cjs_util_fuzzer",
":pdf_fx_date_helpers_fuzzer",
]
if (pdf_enable_xfa) {
deps += [
":pdf_bidi_fuzzer",
":pdf_cfgas_stringformatter_fuzzer",
":pdf_cfx_barcode_fuzzer",
":pdf_codec_jpeg_fuzzer",
":pdf_css_fuzzer",
":pdf_formcalc_context_fuzzer",
":pdf_formcalc_fuzzer",
":pdf_formcalc_translate_fuzzer",
":pdfium_xfa_fuzzer",
":pdfium_xfa_lpm_fuzzer",
]
if (pdf_enable_xfa_bmp) {
deps += [ ":pdf_codec_bmp_fuzzer" ]
}
if (pdf_enable_xfa_gif) {
deps += [
":pdf_codec_gif_fuzzer",
":pdf_lzw_fuzzer",
]
}
if (pdf_enable_xfa_png) {
deps += [ ":pdf_codec_png_fuzzer" ]
}
if (pdf_enable_xfa_tiff) {
deps += [ ":pdf_codec_tiff_fuzzer" ]
}
}
}
if (is_clang) {
deps += [
":pdf_cpdf_tounicodemap_fuzzer",
":pdf_nametree_fuzzer",
]
if (pdf_enable_xfa) {
deps += [
":pdf_xfa_fdp_fuzzer",
":pdf_xfa_raw_fuzzer",
":pdf_xfa_xdp_fdp_fuzzer",
]
}
}
}
pdfium_fuzzer_test("pdfium_fuzzer") {
dict = "dicts/pdf.dict"
seed_corpus = "//third_party/pdfium/testing/resources"
grammar_options = [ "grammar=PDF" ]
}
pdfium_fuzzer_test("pdf_cmap_fuzzer") {
}
pdfium_fuzzer_test("pdf_codec_a85_fuzzer") {
}
pdfium_fuzzer_test("pdf_codec_fax_fuzzer") {
}
pdfium_fuzzer_test("pdf_codec_rle_fuzzer") {
}
pdfium_fuzzer_test("pdf_codec_icc_fuzzer") {
dict = "dicts/pdf_codec_icc.dict"
}
pdfium_fuzzer_test("pdf_codec_jbig2_fuzzer") {
}
pdfium_fuzzer_test("pdf_font_fuzzer") {
}
pdfium_fuzzer_test("pdf_hint_table_fuzzer") {
}
pdfium_fuzzer_test("pdf_jpx_fuzzer") {
seed_corpus = "corpora/pdf_jpx"
}
pdfium_fuzzer_test("pdf_psengine_fuzzer") {
}
pdfium_fuzzer_test("pdf_scanlinecompositor_fuzzer") {
}
pdfium_fuzzer_test("pdf_streamparser_fuzzer") {
}
pdfium_fuzzer_test("pdf_xml_fuzzer") {
dict = "dicts/pdf_xml.dict"
seed_corpus = "//third_party/libxml/fuzz/seed_corpus"
}
if (pdf_enable_v8) {
pdfium_fuzzer_test("pdf_cjs_util_fuzzer") {
}
pdfium_fuzzer_test("pdf_fx_date_helpers_fuzzer") {
}
if (pdf_enable_xfa) {
if (pdf_enable_xfa_bmp) {
pdfium_fuzzer_test("pdf_codec_bmp_fuzzer") {
seed_corpus = "corpora/pdf_codec_bmp"
}
}
if (pdf_enable_xfa_gif) {
pdfium_fuzzer_test("pdf_codec_gif_fuzzer") {
dict = "dicts/pdf_codec_gif.dict"
seed_corpus = "corpora/pdf_codec_gif"
}
}
pdfium_fuzzer_test("pdf_codec_jpeg_fuzzer") {
dict = "dicts/pdf_codec_jpeg.dict"
seed_corpus = "corpora/pdf_codec_jpeg"
}
if (pdf_enable_xfa_png) {
pdfium_fuzzer_test("pdf_codec_png_fuzzer") {
dict = "dicts/pdf_codec_png.dict"
seed_corpuses = [
"corpora/pdf_codec_png",
"//components/test/data/viz",
"//third_party/blink/web_tests/images/png-suite/samples",
"//third_party/blink/web_tests/images/resources/pngfuzz",
]
}
}
if (pdf_enable_xfa_tiff) {
pdfium_fuzzer_test("pdf_codec_tiff_fuzzer") {
dict = "dicts/pdf_codec_tiff.dict"
seed_corpus = "corpora/pdf_codec_tiff"
}
}
pdfium_fuzzer_test("pdf_css_fuzzer") {
dict = "dicts/pdf_css.dict"
}
pdfium_fuzzer_test("pdf_formcalc_context_fuzzer") {
dict = "dicts/pdf_xfa_js.dict"
}
pdfium_fuzzer_test("pdf_formcalc_fuzzer") {
dict = "dicts/pdf_formcalc.dict"
}
pdfium_fuzzer_test("pdf_formcalc_translate_fuzzer") {
dict = "dicts/pdf_formcalc.dict"
}
if (pdf_enable_xfa_gif) {
pdfium_fuzzer_test("pdf_lzw_fuzzer") {
}
}
pdfium_fuzzer_test("pdf_bidi_fuzzer") {
}
pdfium_fuzzer_test("pdf_cfx_barcode_fuzzer") {
}
pdfium_fuzzer_test("pdf_cfgas_stringformatter_fuzzer") {
}
pdfium_fuzzer_test("pdfium_xfa_fuzzer") {
dict = "dicts/pdf.dict"
seed_corpus = "corpora/xfa"
grammar_options = [ "grammar=PDF" ]
}
static_library("proto_to_xfa") {
sources = [
"pdfium_xfa_lpm_fuzzer/proto_to_xfa.cc",
"pdfium_xfa_lpm_fuzzer/proto_to_xfa.h",
"pdfium_xfa_lpm_fuzzer/simple_xfa_pdf.cc",
"pdfium_xfa_lpm_fuzzer/simple_xfa_pdf.h",
]
deps = [ "//base" ]
public_deps = [ ":xfa_proto" ]
}
fuzzer_test("pdfium_xfa_lpm_fuzzer") {
sources = [ "pdfium_xfa_lpm_fuzzer/fuzzer.cc" ]
deps = [
":proto_to_xfa",
"//base",
"//third_party/libprotobuf-mutator",
"//third_party/pdfium",
"//third_party/pdfium/testing/fuzzers:fuzzer_init_public",
]
if (is_component_build) {
deps += [
"//third_party/pdfium/testing/fuzzers:pdfium_xfa_lpm_fuzzer_impl",
]
} else {
deps +=
[ "//third_party/pdfium/testing/fuzzers:pdfium_xfa_lpm_fuzzer_src" ]
}
include_dirs = [ "//third_party/pdfium" ]
# Don't build the fuzzer while it isn't actually producing XFA.
# TODO(metzman): Remove this once the fuzzer actually fuzzes XFA.
additional_configs = [ "//testing/libfuzzer:no_clusterfuzz" ]
}
test("pdfium_xfa_lpm_unittest") {
sources = [ "pdfium_xfa_lpm_fuzzer/simple_xfa_pdf_unittest.cc" ]
deps = [
":proto_to_xfa",
"//base/test:run_all_unittests",
"//testing/gtest",
]
}
}
}
if (is_clang) {
pdfium_fuzzer_test("pdf_cpdf_tounicodemap_fuzzer") {
}
pdfium_fuzzer_test("pdf_nametree_fuzzer") {
}
if (pdf_enable_xfa) {
pdfium_fuzzer_test("pdf_xfa_fdp_fuzzer") {
}
pdfium_fuzzer_test("pdf_xfa_raw_fuzzer") {
dict = "dicts/pdf_xfa_raw_fuzzer.dict"
}
pdfium_fuzzer_test("pdf_xfa_xdp_fdp_fuzzer") {
dict = "dicts/pdf_xfa_raw_fuzzer.dict"
}
}
}
proto_library("xfa_proto") {
sources = [ "pdfium_xfa_lpm_fuzzer/xfa.proto" ]
}