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;