Enable XFA in LPM fuzzer
Rename LPM fuzzer to pdfium_xfa_lpm_fuzzer and fix coverage build by
preventing duplicate symbol error.
Bug: chromium:969811
Change-Id: I1013370e8e397c3b833d9c3ad46cdecb444d79af
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55531
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Auto-Submit: Jonathan Metzman <metzman@chromium.org>
diff --git a/testing/fuzzers/BUILD.gn b/testing/fuzzers/BUILD.gn
index aba2375..f82c395 100644
--- a/testing/fuzzers/BUILD.gn
+++ b/testing/fuzzers/BUILD.gn
@@ -30,7 +30,6 @@
"pdf_streamparser_fuzzer",
"pdf_xml_fuzzer",
"pdfium_fuzzer",
- "pdfium_lpm_fuzzer",
]
if (pdf_enable_v8) {
fuzzer_list += [
@@ -48,6 +47,7 @@
"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" ]
@@ -399,6 +399,18 @@
]
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
+ }
}
}
@@ -539,15 +551,3 @@
]
public_fuzzer = true
}
-
-pdfium_fuzzer("pdfium_lpm_fuzzer") {
- sources = [
- "pdfium_lpm_fuzz_stub.cc",
- "pdfium_lpm_fuzz_stub.h",
- ]
- deps = [
- ":fuzzer_helper",
- "../../:pdfium_public_headers",
- ]
- public_fuzzer = true
-}
diff --git a/testing/fuzzers/pdfium_lpm_fuzz_stub.cc b/testing/fuzzers/pdfium_lpm_fuzz_stub.cc
deleted file mode 100644
index 0989005..0000000
--- a/testing/fuzzers/pdfium_lpm_fuzz_stub.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "testing/fuzzers/pdfium_fuzzer_helper.h"
-#include "testing/fuzzers/pdfium_lpm_fuzz_stub.h"
-
-class PDFiumLpmFuzzStub : public PDFiumFuzzerHelper {
- public:
- PDFiumLpmFuzzStub() = default;
- ~PDFiumLpmFuzzStub() override = default;
-
- int GetFormCallbackVersion() const override { return 1; }
-};
-
-void FuzzPdf(const char* pdf, size_t size) {
- PDFiumLpmFuzzStub fuzz_stub;
- fuzz_stub.RenderPdf(pdf, size);
-}
diff --git a/testing/fuzzers/pdfium_lpm_fuzz_stub.h b/testing/fuzzers/pdfium_lpm_fuzz_stub.h
deleted file mode 100644
index e5f9416..0000000
--- a/testing/fuzzers/pdfium_lpm_fuzz_stub.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef TESTING_FUZZERS_PDFIUM_LPM_FUZZ_STUB_H_
-#define TESTING_FUZZERS_PDFIUM_LPM_FUZZ_STUB_H_
-
-#include "public/fpdfview.h"
-
-// LPM defines LLVMFuzzerTestOneInput, this function should be used by the LPM
-// harness to pass the deserialized proto to PDFium.
-FPDF_EXPORT void FuzzPdf(const char* pdf, size_t size);
-
-#endif // TESTING_FUZZERS_PDFIUM_LPM_FUZZ_STUB_H_
diff --git a/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.cc b/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.cc
new file mode 100644
index 0000000..c4b55b6
--- /dev/null
+++ b/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.cc
@@ -0,0 +1,28 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "public/fpdf_formfill.h"
+#include "testing/fuzzers/pdfium_fuzzer_helper.h"
+#include "testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.h"
+
+class PDFiumLpmFuzzStub : public PDFiumFuzzerHelper {
+ public:
+ PDFiumLpmFuzzStub() = default;
+ ~PDFiumLpmFuzzStub() override = default;
+
+ int GetFormCallbackVersion() const override { return 2; }
+ // Allow fuzzer to fuzz XFA but don't require it to fuzz.
+ bool OnFormFillEnvLoaded(FPDF_DOCUMENT doc) override {
+ FPDF_LoadXFA(doc);
+ return true;
+ }
+};
+
+void PdfiumXFALPMFuzzStub(const char* pdf, size_t size) {
+ PDFiumLpmFuzzStub fuzz_stub;
+ fuzz_stub.RenderPdf(pdf, size);
+}
diff --git a/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.h b/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.h
new file mode 100644
index 0000000..bb6bf1d
--- /dev/null
+++ b/testing/fuzzers/pdfium_xfa_lpm_fuzz_stub.h
@@ -0,0 +1,14 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TESTING_FUZZERS_PDFIUM_XFA_LPM_FUZZ_STUB_H_
+#define TESTING_FUZZERS_PDFIUM_XFA_LPM_FUZZ_STUB_H_
+
+#include "public/fpdfview.h"
+
+// LPM defines LLVMFuzzerTestOneInput, this function should be used by the LPM
+// harness to pass the deserialized proto to PDFium.
+FPDF_EXPORT void PdfiumXFALPMFuzzStub(const char* pdf, size_t size);
+
+#endif // TESTING_FUZZERS_PDFIUM_XFA_LPM_FUZZ_STUB_H_