You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
515 lines
12 KiB
515 lines
12 KiB
# 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_core_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" ]
|
|
}
|
|
|
|
source_set("fuzzer_init_public") {
|
|
testonly = true
|
|
sources = [ "pdf_fuzzer_init_public.cc" ]
|
|
include_dirs = [ "../.." ]
|
|
deps = [ "../../:pdfium_public_headers" ]
|
|
if (pdf_enable_v8) {
|
|
configs += [ "//v8:external_startup_data" ]
|
|
deps += [
|
|
"../:test_support",
|
|
"//v8",
|
|
"//v8:v8_libplatform",
|
|
]
|
|
}
|
|
}
|
|
|
|
if (is_component_build) {
|
|
group("fuzzer_impls") {
|
|
deps = []
|
|
foreach(fuzzer, fuzzer_list) {
|
|
deps += [ ":${fuzzer}_impl" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
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") {
|
|
if (defined(invoker.public_fuzzer) && invoker.public_fuzzer) {
|
|
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 -= [ "//build/config/compiler:chromium_code" ]
|
|
configs += [
|
|
"//build/config/compiler:no_chromium_code",
|
|
":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 (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",
|
|
"../../xfa/fgas/layout",
|
|
"//third_party/icu:icuuc",
|
|
]
|
|
}
|
|
|
|
pdfium_fuzzer("pdf_cfgas_stringformatter_fuzzer") {
|
|
sources = [ "pdf_cfgas_stringformatter_fuzzer.cc" ]
|
|
deps = [
|
|
"../../core/fxcrt",
|
|
"../../xfa/fgas",
|
|
"../../xfa/fxfa/parser",
|
|
]
|
|
}
|
|
|
|
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 = [
|
|
"../../core/fxcrt",
|
|
"../../fxjs",
|
|
]
|
|
}
|
|
|
|
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 = [
|
|
"../../core/fxcrt",
|
|
"../../xfa/fxfa/fm2js",
|
|
]
|
|
}
|
|
|
|
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/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
|
|
}
|