| # Copyright 2016 The PDFium Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| import("../../pdfium.gni") | |
| config("fuzzer_config") { | |
| configs = [ | |
| "../..:pdfium_strict_config", | |
| "../..:pdfium_noshorten_config", | |
| ] | |
| defines = [] | |
| include_dirs = [ "../.." ] | |
| } | |
| # All possible "pdfium_fuzzer"s. | |
| fuzzer_list = [ | |
| "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) { | |
| fuzzer_list += [ | |
| "pdf_cjs_util_fuzzer", | |
| "pdf_fx_date_helpers_fuzzer", | |
| ] | |
| if (pdf_enable_xfa) { | |
| fuzzer_list += [ | |
| "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) { | |
| fuzzer_list += [ "pdf_codec_bmp_fuzzer" ] | |
| } | |
| if (pdf_enable_xfa_gif) { | |
| fuzzer_list += [ | |
| "pdf_codec_gif_fuzzer", | |
| "pdf_lzw_fuzzer", | |
| ] | |
| } | |
| if (pdf_enable_xfa_png) { | |
| fuzzer_list += [ "pdf_codec_png_fuzzer" ] | |
| } | |
| if (pdf_enable_xfa_tiff) { | |
| fuzzer_list += [ "pdf_codec_tiff_fuzzer" ] | |
| } | |
| } | |
| } | |
| if (is_clang) { | |
| # Fuzzers that use FuzzedDataProvider can only be built with Clang. | |
| fuzzer_list += [ | |
| "pdf_cpdf_tounicodemap_fuzzer", | |
| "pdf_nametree_fuzzer", | |
| ] | |
| if (pdf_enable_xfa) { | |
| fuzzer_list += [ | |
| "pdf_xfa_fdp_fuzzer", | |
| "pdf_xfa_raw_fuzzer", | |
| "pdf_xfa_xdp_fdp_fuzzer", | |
| ] | |
| } | |
| } | |
| # Note that this only compiles all the fuzzers, to prevent compile breakages. | |
| # It does not link and create fuzzer executables. That is done in Chromium. | |
| group("fuzzers") { | |
| testonly = true | |
| deps = [] | |
| foreach(fuzzer, fuzzer_list) { | |
| deps += [ ":${fuzzer}_src" ] | |
| } | |
| if (is_component_build) { | |
| deps += [ ":fuzzer_impls" ] | |
| } | |
| } | |
| source_set("fuzzer_pdf_templates") { | |
| sources = [ "pdf_fuzzer_templates.h" ] | |
| } | |
| source_set("fuzzer_init") { | |
| testonly = true | |
| sources = [ "pdf_fuzzer_init.cc" ] | |
| include_dirs = [ "../.." ] | |
| deps = [ | |
| "../../:pdfium_public_headers", | |
| "../../fpdfsdk", | |
| ] | |
| } | |
| if (pdf_enable_xfa) { | |
| assert(pdf_enable_v8) | |
| source_set("fuzzer_xfa_process_state") { | |
| testonly = !is_component_build | |
| sources = [ | |
| "xfa_process_state.cc", | |
| "xfa_process_state.h", | |
| ] | |
| configs += [ ":fuzzer_config" ] | |
| deps = [ | |
| "../../fxjs:gc", | |
| "//v8", | |
| ] | |
| } | |
| } | |
| source_set("fuzzer_init_public") { | |
| testonly = true | |
| sources = [ "pdf_fuzzer_init_public.cc" ] | |
| include_dirs = [ "../.." ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../:pdfium_public_headers", | |
| "../../fpdfsdk", | |
| ] | |
| if (pdf_enable_v8) { | |
| configs += [ "//v8:external_startup_data" ] | |
| deps += [ | |
| "../:test_support", | |
| "../../fxjs", | |
| "//v8", | |
| "//v8:v8_libplatform", | |
| ] | |
| if (pdf_enable_xfa) { | |
| deps += [ ":fuzzer_xfa_process_state" ] | |
| } | |
| } | |
| } | |
| if (is_component_build) { | |
| group("fuzzer_impls") { | |
| deps = [] | |
| foreach(fuzzer, fuzzer_list) { | |
| deps += [ ":${fuzzer}_impl" ] | |
| } | |
| if (pdf_enable_xfa) { | |
| deps += [ ":fuzzer_xfa_process_state" ] | |
| } | |
| } | |
| } | |
| source_set("fuzzer_helper") { | |
| testonly = !is_component_build | |
| sources = [ | |
| "pdfium_fuzzer_helper.cc", | |
| "pdfium_fuzzer_helper.h", | |
| ] | |
| configs += [ ":fuzzer_config" ] | |
| deps = [ | |
| "../../:pdfium_public_headers", | |
| "../../fpdfsdk", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| source_set("fuzzer_utils") { | |
| # In component builds, the pdfium target (which is not testonly) depends on | |
| # the fuzzer sources, which may depend on this target, so add testonly only in | |
| # non-component builds. | |
| testonly = !is_component_build | |
| sources = [ | |
| "pdfium_fuzzer_util.cc", | |
| "pdfium_fuzzer_util.h", | |
| ] | |
| deps = [ "../../:pdfium_public_headers" ] | |
| include_dirs = [ "../.." ] | |
| } | |
| template("pdfium_fuzzer") { | |
| is_public = defined(invoker.public_fuzzer) && invoker.public_fuzzer | |
| if (is_public) { | |
| init_dep = ":fuzzer_init_public" | |
| } else { | |
| init_dep = ":fuzzer_init" | |
| } | |
| if (is_component_build) { | |
| # In component builds, fuzzers are split into "_impl" and "_src" targets. | |
| # The "_impl" target exports the fuzzer implementation. The "_src" target | |
| # is a thin wrapper that imports the fuzzer from PDFium; this gets linked | |
| # into the real fuzzer executable. The real fuzzer target has to depend on | |
| # both the "_impl" and "_src" targets. | |
| # In static builds, there's only a single "_src" target that contains the | |
| # implementation and statically links in PDFium. | |
| impl_name = target_name + "_impl" | |
| template_target_name = target_name | |
| source_set("${target_name}_src") { | |
| testonly = true | |
| sources = [ "component_fuzzer_template.cc" ] | |
| deps = [ | |
| "../../:pdfium_public_headers", | |
| init_dep, | |
| ] | |
| configs += [ ":fuzzer_config" ] | |
| defines = [ "FUZZER_IMPL=${template_target_name}" ] | |
| } | |
| } else { | |
| impl_name = target_name + "_src" | |
| } | |
| source_set(impl_name) { | |
| sources = invoker.sources | |
| deps = [] | |
| if (defined(invoker.deps)) { | |
| deps += invoker.deps | |
| } | |
| configs += [ ":fuzzer_config" ] | |
| if (is_component_build) { | |
| # |export| should be consistent with FPDF_EXPORT In public/fpdfview.h. | |
| if (is_win) { | |
| export = "__declspec(dllexport)" | |
| } else { | |
| export = "__attribute__((visibility(\"default\")))" | |
| } | |
| defines = [ "LLVMFuzzerTestOneInput=${export} ${template_target_name}" ] | |
| deps += [ "../../:pdfium_public_headers" ] | |
| } else { | |
| testonly = true | |
| deps += [ | |
| "../../:pdfium", | |
| init_dep, | |
| ] | |
| } | |
| if (is_public && pdf_enable_xfa) { | |
| deps += [ ":fuzzer_xfa_process_state" ] | |
| } | |
| } | |
| } | |
| if (pdf_enable_v8) { | |
| pdfium_fuzzer("pdf_cjs_util_fuzzer") { | |
| sources = [ "pdf_cjs_util_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcrt", | |
| "../../fpdfsdk", | |
| "../../fxjs", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_fx_date_helpers_fuzzer") { | |
| sources = [ "pdf_fx_date_helpers_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcrt", | |
| "../../fpdfsdk", | |
| "../../fxjs", | |
| ] | |
| } | |
| if (pdf_enable_xfa) { | |
| pdfium_fuzzer("pdf_bidi_fuzzer") { | |
| sources = [ "pdf_bidi_fuzzer.cc" ] | |
| deps = [ | |
| "../../:freetype_common", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../xfa/fgas/font", | |
| "../../xfa/fgas/layout", | |
| "//third_party/icu:icuuc", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_cfgas_stringformatter_fuzzer") { | |
| sources = [ "pdf_cfgas_stringformatter_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fxcrt", | |
| "../../fpdfsdk", | |
| "../../fxjs:gc", | |
| "../../xfa/fgas/crt", | |
| "../../xfa/fxfa", | |
| "../../xfa/fxfa/parser", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdf_cfx_barcode_fuzzer") { | |
| sources = [ "pdf_cfx_barcode_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcrt", | |
| "../../fxbarcode", | |
| "//third_party/icu:icuuc", | |
| ] | |
| } | |
| if (pdf_enable_xfa_bmp) { | |
| pdfium_fuzzer("pdf_codec_bmp_fuzzer") { | |
| sources = [ | |
| "pdf_codec_bmp_fuzzer.cc", | |
| "xfa_codec_fuzzer.h", | |
| ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| } | |
| if (pdf_enable_xfa_gif) { | |
| pdfium_fuzzer("pdf_codec_gif_fuzzer") { | |
| sources = [ | |
| "pdf_codec_gif_fuzzer.cc", | |
| "xfa_codec_fuzzer.h", | |
| ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_lzw_fuzzer") { | |
| sources = [ "pdf_lzw_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| } | |
| pdfium_fuzzer("pdf_codec_jpeg_fuzzer") { | |
| sources = [ | |
| "pdf_codec_jpeg_fuzzer.cc", | |
| "xfa_codec_fuzzer.h", | |
| ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| if (pdf_enable_xfa_png) { | |
| pdfium_fuzzer("pdf_codec_png_fuzzer") { | |
| sources = [ | |
| "pdf_codec_png_fuzzer.cc", | |
| "xfa_codec_fuzzer.h", | |
| ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| } | |
| if (pdf_enable_xfa_tiff) { | |
| pdfium_fuzzer("pdf_codec_tiff_fuzzer") { | |
| sources = [ | |
| "pdf_codec_tiff_fuzzer.cc", | |
| "xfa_codec_fuzzer.h", | |
| ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| } | |
| pdfium_fuzzer("pdf_css_fuzzer") { | |
| sources = [ "pdf_css_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcrt", | |
| "../../core/fxcrt/css", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_formcalc_translate_fuzzer") { | |
| sources = [ "pdf_formcalc_translate_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fxcrt", | |
| "../../fpdfsdk", | |
| "../../fxjs", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdf_formcalc_context_fuzzer") { | |
| sources = [ "pdf_formcalc_context_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| "../../:pdfium_public_headers", | |
| "../../core/fxcrt", | |
| "../../fpdfsdk", | |
| "../../fpdfsdk/fpdfxfa", | |
| "../../fxjs", | |
| "../../xfa/fxfa", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdf_formcalc_fuzzer") { | |
| sources = [ "pdf_formcalc_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fxcrt", | |
| "../../fxjs:gc", | |
| "../../xfa/fxfa/formcalc", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdfium_xfa_fuzzer") { | |
| sources = [ "pdfium_xfa_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| "../../:pdfium_public_headers", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdfium_xfa_lpm_fuzzer") { | |
| sources = [ | |
| "pdfium_xfa_lpm_fuzz_stub.cc", | |
| "pdfium_xfa_lpm_fuzz_stub.h", | |
| ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| "../../:pdfium_public_headers", | |
| ] | |
| public_fuzzer = true | |
| } | |
| } | |
| } | |
| if (is_clang) { | |
| pdfium_fuzzer("pdf_cpdf_tounicodemap_fuzzer") { | |
| sources = [ "pdf_cpdf_tounicodemap_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/font", | |
| "../../core/fpdfapi/parser", | |
| "../../core/fxcrt", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_nametree_fuzzer") { | |
| sources = [ "pdf_nametree_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/page", | |
| "../../core/fpdfapi/parser", | |
| "../../core/fpdfdoc", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| if (pdf_enable_xfa) { | |
| pdfium_fuzzer("pdf_xfa_fdp_fuzzer") { | |
| sources = [ "pdf_xfa_fdp_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| ":fuzzer_pdf_templates", | |
| "../../third_party:pdfium_base", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdf_xfa_raw_fuzzer") { | |
| sources = [ "pdf_xfa_raw_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| ":fuzzer_pdf_templates", | |
| "../../third_party:pdfium_base", | |
| ] | |
| public_fuzzer = true | |
| } | |
| pdfium_fuzzer("pdf_xfa_xdp_fdp_fuzzer") { | |
| sources = [ "pdf_xfa_xdp_fdp_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_helper", | |
| ":fuzzer_pdf_templates", | |
| ] | |
| public_fuzzer = true | |
| } | |
| } | |
| } | |
| pdfium_fuzzer("pdf_cmap_fuzzer") { | |
| sources = [ "pdf_cmap_fuzzer.cc" ] | |
| deps = [ | |
| "../../:freetype_common", | |
| "../../core/fpdfapi/font", | |
| "../../core/fxcrt", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_codec_a85_fuzzer") { | |
| sources = [ "pdf_codec_a85_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_codec_fax_fuzzer") { | |
| sources = [ "pdf_codec_fax_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fxcodec", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_codec_icc_fuzzer") { | |
| sources = [ "pdf_codec_icc_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../third_party:pdfium_base", | |
| "../../third_party/:lcms2", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_codec_jbig2_fuzzer") { | |
| sources = [ "pdf_codec_jbig2_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fpdfapi/parser", | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_codec_rle_fuzzer") { | |
| sources = [ "pdf_codec_rle_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_font_fuzzer") { | |
| sources = [ "pdf_font_fuzzer.cc" ] | |
| deps = [ "../../:pdfium_public_headers" ] | |
| } | |
| pdfium_fuzzer("pdf_hint_table_fuzzer") { | |
| sources = [ "pdf_hint_table_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/parser", | |
| "../../core/fxcrt", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_jpx_fuzzer") { | |
| sources = [ "pdf_jpx_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/page", | |
| "../../core/fxcodec", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_psengine_fuzzer") { | |
| sources = [ "pdf_psengine_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/page", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_scanlinecompositor_fuzzer") { | |
| sources = [ "pdf_scanlinecompositor_fuzzer.cc" ] | |
| deps = [ | |
| ":fuzzer_utils", | |
| "../../core/fxcrt", | |
| "../../core/fxge", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_streamparser_fuzzer") { | |
| sources = [ "pdf_streamparser_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fpdfapi/page", | |
| "../../core/fpdfapi/parser", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdf_xml_fuzzer") { | |
| sources = [ "pdf_xml_fuzzer.cc" ] | |
| deps = [ | |
| "../../core/fxcrt", | |
| "../../third_party:pdfium_base", | |
| ] | |
| } | |
| pdfium_fuzzer("pdfium_fuzzer") { | |
| sources = [ "pdfium_fuzzer.cc" ] | |
| deps = [ ":fuzzer_helper" ] | |
| public_fuzzer = true | |
| } |