Use buffers from the partition in CPDFSDK_FormFillEnvironment

- fix string_view_template.h to take an Allocator Type argument.

Change-Id: Ia67bebc8ad0d1145d7fd09e81a9c0e49e17798fd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/62752
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h
index 32f25cc..4a7c4a6 100644
--- a/core/fxcrt/string_view_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -73,7 +73,9 @@
       : m_Span(reinterpret_cast<const UnsignedType*>(&ch), 1) {}
 
   // Any changes to |vec| invalidate the string.
-  explicit StringViewTemplate(const std::vector<UnsignedType>& vec) noexcept
+  template <typename AllocType>
+  explicit StringViewTemplate(
+      const std::vector<UnsignedType, AllocType>& vec) noexcept
       : m_Span(!vec.empty() ? vec.data() : nullptr, vec.size()) {}
 
   StringViewTemplate& operator=(const CharType* src) {
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 3c1dae5..8f9bdd1 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -8,10 +8,12 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfdoc/cpdf_docjsactions.h"
+#include "core/fxcrt/fx_memory_wrappers.h"
 #include "fpdfsdk/cpdfsdk_actionhandler.h"
 #include "fpdfsdk/cpdfsdk_annothandlermgr.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
@@ -128,7 +130,7 @@
   if (nRequiredLen <= 0)
     return WideString();
 
-  std::vector<uint8_t> pBuff(nRequiredLen);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(nRequiredLen);
   int nActualLen =
       m_pInfo->FFI_GetLanguage(m_pInfo, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
@@ -150,7 +152,7 @@
   if (nRequiredLen <= 0)
     return WideString();
 
-  std::vector<uint8_t> pBuff(nRequiredLen);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(nRequiredLen);
   int nActualLen =
       m_pInfo->FFI_GetPlatform(m_pInfo, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
@@ -218,7 +220,7 @@
   if (nRequiredLen <= 0)
     return WideString();
 
-  std::vector<uint8_t> pBuff(nRequiredLen);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(nRequiredLen);
   const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse(
       m_pInfo->m_pJsPlatform, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
@@ -291,7 +293,7 @@
   if (nRequiredLen <= 0)
     return WideString();
 
-  std::vector<uint8_t> pBuff(nRequiredLen);
+  std::vector<uint8_t, FxAllocAllocator<uint8_t>> pBuff(nRequiredLen);
   const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
       m_pInfo->m_pJsPlatform, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)