| # 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" ] |
| } |