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_