Use FixedUninitDataVectors in CPDF_TransferFunc.

The data that CPDF_TransferFunc holds can be written into
FixedUninitDataVectors. So use that container type instead of DataVector
to avoid initialization.

Change-Id: I5d50213a8b70f2f5e40ad928c460ca8662daa376
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/98151
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_transferfunc.cpp b/core/fpdfapi/page/cpdf_transferfunc.cpp
index f1a0a5b..a9e0663 100644
--- a/core/fpdfapi/page/cpdf_transferfunc.cpp
+++ b/core/fpdfapi/page/cpdf_transferfunc.cpp
@@ -12,14 +12,14 @@
 
 #include "core/fpdfapi/page/cpdf_transferfuncdib.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
-#include "core/fxcrt/data_vector.h"
+#include "core/fxcrt/fixed_uninit_data_vector.h"
 #include "core/fxge/dib/cfx_dibbase.h"
 #include "third_party/base/check_op.h"
 
 CPDF_TransferFunc::CPDF_TransferFunc(bool bIdentify,
-                                     DataVector<uint8_t> samples_r,
-                                     DataVector<uint8_t> samples_g,
-                                     DataVector<uint8_t> samples_b)
+                                     FixedUninitDataVector<uint8_t> samples_r,
+                                     FixedUninitDataVector<uint8_t> samples_g,
+                                     FixedUninitDataVector<uint8_t> samples_b)
     : m_bIdentity(bIdentify),
       m_SamplesR(std::move(samples_r)),
       m_SamplesG(std::move(samples_g)),
@@ -32,9 +32,9 @@
 CPDF_TransferFunc::~CPDF_TransferFunc() = default;
 
 FX_COLORREF CPDF_TransferFunc::TranslateColor(FX_COLORREF colorref) const {
-  return FXSYS_BGR(m_SamplesB[FXSYS_GetBValue(colorref)],
-                   m_SamplesG[FXSYS_GetGValue(colorref)],
-                   m_SamplesR[FXSYS_GetRValue(colorref)]);
+  return FXSYS_BGR(m_SamplesB.span()[FXSYS_GetBValue(colorref)],
+                   m_SamplesG.span()[FXSYS_GetGValue(colorref)],
+                   m_SamplesR.span()[FXSYS_GetRValue(colorref)]);
 }
 
 RetainPtr<CFX_DIBBase> CPDF_TransferFunc::TranslateImage(
diff --git a/core/fpdfapi/page/cpdf_transferfunc.h b/core/fpdfapi/page/cpdf_transferfunc.h
index b558559..d240510 100644
--- a/core/fpdfapi/page/cpdf_transferfunc.h
+++ b/core/fpdfapi/page/cpdf_transferfunc.h
@@ -9,7 +9,7 @@
 
 #include <stdint.h>
 
-#include "core/fxcrt/data_vector.h"
+#include "core/fxcrt/fixed_uninit_data_vector.h"
 #include "core/fxcrt/observed_ptr.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/dib/fx_dib.h"
@@ -35,15 +35,15 @@
 
  private:
   CPDF_TransferFunc(bool bIdentify,
-                    DataVector<uint8_t> samples_r,
-                    DataVector<uint8_t> samples_g,
-                    DataVector<uint8_t> samples_b);
+                    FixedUninitDataVector<uint8_t> samples_r,
+                    FixedUninitDataVector<uint8_t> samples_g,
+                    FixedUninitDataVector<uint8_t> samples_b);
   ~CPDF_TransferFunc() override;
 
   const bool m_bIdentity;
-  const DataVector<uint8_t> m_SamplesR;
-  const DataVector<uint8_t> m_SamplesG;
-  const DataVector<uint8_t> m_SamplesB;
+  const FixedUninitDataVector<uint8_t> m_SamplesR;
+  const FixedUninitDataVector<uint8_t> m_SamplesG;
+  const FixedUninitDataVector<uint8_t> m_SamplesB;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_TRANSFERFUNC_H_
diff --git a/core/fpdfapi/render/cpdf_docrenderdata.cpp b/core/fpdfapi/render/cpdf_docrenderdata.cpp
index 02c9803..a2e0654 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata.cpp
+++ b/core/fpdfapi/render/cpdf_docrenderdata.cpp
@@ -20,7 +20,7 @@
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/render/cpdf_type3cache.h"
-#include "core/fxcrt/data_vector.h"
+#include "core/fxcrt/fixed_uninit_data_vector.h"
 
 #if BUILDFLAG(IS_WIN)
 #include "core/fxge/win32/cfx_psfonttracker.h"
@@ -99,11 +99,15 @@
   std::fill(std::begin(output), std::end(output), 0.0f);
 
   bool bIdentity = true;
-  DataVector<uint8_t> samples_r(CPDF_TransferFunc::kChannelSampleSize);
-  DataVector<uint8_t> samples_g(CPDF_TransferFunc::kChannelSampleSize);
-  DataVector<uint8_t> samples_b(CPDF_TransferFunc::kChannelSampleSize);
-  std::array<pdfium::span<uint8_t>, 3> samples = {samples_r, samples_g,
-                                                  samples_b};
+  FixedUninitDataVector<uint8_t> samples_r(
+      CPDF_TransferFunc::kChannelSampleSize);
+  FixedUninitDataVector<uint8_t> samples_g(
+      CPDF_TransferFunc::kChannelSampleSize);
+  FixedUninitDataVector<uint8_t> samples_b(
+      CPDF_TransferFunc::kChannelSampleSize);
+  std::array<pdfium::span<uint8_t>, 3> samples = {samples_r.writable_span(),
+                                                  samples_g.writable_span(),
+                                                  samples_b.writable_span()};
   if (pArray) {
     for (size_t v = 0; v < CPDF_TransferFunc::kChannelSampleSize; ++v) {
       float input = static_cast<float>(v) / 255.0f;