blob: 2eeb807d572c3fc0ae61200008823e4074fd6a3d [file] [log] [blame] [edit]
# 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" ]
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_fm2js_fuzzer",
"pdf_formcalc_context_fuzzer",
"pdf_formcalc_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_nametree_fuzzer" ]
}
group("fuzzers") {
testonly = true
deps = []
foreach(fuzzer, fuzzer_list) {
deps += [ ":${fuzzer}_src" ]
}
}
source_set("fuzzer_init") {
testonly = true
sources = [ "pdf_fuzzer_init.cc" ]
include_dirs = [ "../.." ]
deps = [ "../../:pdfium_public_headers" ]
}
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",
]
if (pdf_enable_v8) {
configs += [ "//v8:external_startup_data" ]
deps += [
"../:test_support",
"//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",
"../../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 and gets statically
# linked into the PDFium shared library. The "_src" target is a thin
# wrapper that imports the fuzzer from PDFium; this gets linked into the
# real fuzzer executable. 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",
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",
"../../fxjs",
]
}
pdfium_fuzzer("pdf_fx_date_helpers_fuzzer") {
sources = [ "pdf_fx_date_helpers_fuzzer.cc" ]
deps = [
"../../core/fxcrt",
"../../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",
"../../fxjs:gc",
"../../xfa/fgas/crt",
"../../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_fm2js_fuzzer") {
sources = [ "pdf_fm2js_fuzzer.cc" ]
deps = [
":fuzzer_utils",
"../../core/fxcrt",
"../../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/fm2js",
]
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_nametree_fuzzer") {
sources = [ "pdf_nametree_fuzzer.cc" ]
deps = [
"../../core/fpdfapi/page",
"../../core/fpdfapi/parser",
"../../core/fpdfdoc",
"../../third_party:pdfium_base",
]
}
}
pdfium_fuzzer("pdf_cmap_fuzzer") {
sources = [ "pdf_cmap_fuzzer.cc" ]
deps = [
"../../:freetype_common",
"../../core/fpdfapi/font",
"../../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
}