Set up DiscardableMemoryAllocator for pdfium fuzzer Sets up DiscardableMemoryAllocator for pdfium fuzzer when fuzzer is built and run from Chromium. Bug: chromium:1433189 Change-Id: Ief43a9151885a42890fa3e6f5046ccf0745ed0cc Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/106270 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/testing/fuzzers/BUILD.gn b/testing/fuzzers/BUILD.gn index 9667ba1..6924558 100644 --- a/testing/fuzzers/BUILD.gn +++ b/testing/fuzzers/BUILD.gn
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build_overrides/build.gni") import("../../pdfium.gni") config("fuzzer_config") { @@ -149,6 +150,7 @@ if (is_component_build) { group("fuzzer_impls") { + testonly = true deps = [] foreach(fuzzer, fuzzer_list) { deps += [ ":${fuzzer}_impl" ] @@ -218,6 +220,7 @@ impl_name = target_name + "_src" } source_set(impl_name) { + testonly = true sources = invoker.sources deps = [] if (defined(invoker.deps)) { @@ -613,5 +616,11 @@ pdfium_fuzzer("pdfium_fuzzer") { sources = [ "pdfium_fuzzer.cc" ] deps = [ ":fuzzer_helper" ] + if (build_with_chromium) { + deps += [ + "//base", + "//base/test:test_support", + ] + } public_fuzzer = true }
diff --git a/testing/fuzzers/DEPS b/testing/fuzzers/DEPS index fe9eaf6..d577044 100644 --- a/testing/fuzzers/DEPS +++ b/testing/fuzzers/DEPS
@@ -1,4 +1,7 @@ include_rules = [ '+fxbarcode', '+xfa', + + # Only used when the fuzzer is embedded in Chromium. + '+base', ]
diff --git a/testing/fuzzers/pdfium_fuzzer.cc b/testing/fuzzers/pdfium_fuzzer.cc index e70702a..7e25fed 100644 --- a/testing/fuzzers/pdfium_fuzzer.cc +++ b/testing/fuzzers/pdfium_fuzzer.cc
@@ -6,6 +6,12 @@ #include "testing/fuzzers/pdfium_fuzzer_helper.h" +#if defined(BUILD_WITH_CHROMIUM) +#include "base/memory/discardable_memory_allocator.h" +#include "base/no_destructor.h" +#include "base/test/test_discardable_memory_allocator.h" +#endif + class PDFiumFuzzer : public PDFiumFuzzerHelper { public: PDFiumFuzzer() = default; @@ -15,6 +21,12 @@ }; extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { +#if defined(BUILD_WITH_CHROMIUM) + static base::NoDestructor<base::TestDiscardableMemoryAllocator> + test_memory_allocator; + base::DiscardableMemoryAllocator::SetInstance(test_memory_allocator.get()); +#endif + PDFiumFuzzer fuzzer; fuzzer.RenderPdf(reinterpret_cast<const char*>(data), size); return 0;