| # Copyright 2016 The PDFium Authors. All rights reserved. |
| # 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 = [ |
| "PNG_PREFIX", |
| "PNG_USE_READ_MACROS", |
| ] |
| 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 |
| } |