diff --git a/core/fpdfapi/page/cpdf_expintfunc.cpp b/core/fpdfapi/page/cpdf_expintfunc.cpp
index ac17b28..cb83ac2 100644
--- a/core/fpdfapi/page/cpdf_expintfunc.cpp
+++ b/core/fpdfapi/page/cpdf_expintfunc.cpp
@@ -14,10 +14,7 @@
 CPDF_ExpIntFunc::CPDF_ExpIntFunc()
     : CPDF_Function(Type::kType2ExpotentialInterpolation) {}
 
-CPDF_ExpIntFunc::~CPDF_ExpIntFunc() {
-  FX_Free(m_pBeginValues);
-  FX_Free(m_pEndValues);
-}
+CPDF_ExpIntFunc::~CPDF_ExpIntFunc() = default;
 
 bool CPDF_ExpIntFunc::v_Init(const CPDF_Object* pObj,
                              std::set<const CPDF_Object*>* pVisited) {
@@ -25,13 +22,11 @@
   if (!pDict)
     return false;
 
-  {
-    const CPDF_Number* pExponent = ToNumber(pDict->GetObjectFor("N"));
-    if (!pExponent)
-      return false;
+  const CPDF_Number* pExponent = ToNumber(pDict->GetObjectFor("N"));
+  if (!pExponent)
+    return false;
 
-    m_Exponent = pExponent->GetNumber();
-  }
+  m_Exponent = pExponent->GetNumber();
 
   const CPDF_Array* pArray0 = pDict->GetArrayFor("C0");
   if (pArray0 && m_nOutputs == 0)
@@ -40,11 +35,11 @@
     m_nOutputs = 1;
 
   const CPDF_Array* pArray1 = pDict->GetArrayFor("C1");
-  m_pBeginValues = FX_Alloc2D(float, m_nOutputs, 2);
-  m_pEndValues = FX_Alloc2D(float, m_nOutputs, 2);
+  m_BeginValues = pdfium::Vector2D<float>(m_nOutputs, 2);
+  m_EndValues = pdfium::Vector2D<float>(m_nOutputs, 2);
   for (uint32_t i = 0; i < m_nOutputs; i++) {
-    m_pBeginValues[i] = pArray0 ? pArray0->GetFloatAt(i) : 0.0f;
-    m_pEndValues[i] = pArray1 ? pArray1->GetFloatAt(i) : 1.0f;
+    m_BeginValues[i] = pArray0 ? pArray0->GetFloatAt(i) : 0.0f;
+    m_EndValues[i] = pArray1 ? pArray1->GetFloatAt(i) : 1.0f;
   }
 
   FX_SAFE_UINT32 nOutputs = m_nOutputs;
@@ -58,11 +53,12 @@
 }
 
 bool CPDF_ExpIntFunc::v_Call(const float* inputs, float* results) const {
-  for (uint32_t i = 0; i < m_nInputs; i++)
+  for (uint32_t i = 0; i < m_nInputs; i++) {
     for (uint32_t j = 0; j < m_nOrigOutputs; j++) {
       results[i * m_nOrigOutputs + j] =
-          m_pBeginValues[j] + FXSYS_pow(inputs[i], m_Exponent) *
-                                  (m_pEndValues[j] - m_pBeginValues[j]);
+          m_BeginValues[j] + FXSYS_pow(inputs[i], m_Exponent) *
+                                 (m_EndValues[j] - m_BeginValues[j]);
     }
+  }
   return true;
 }
diff --git a/core/fpdfapi/page/cpdf_expintfunc.h b/core/fpdfapi/page/cpdf_expintfunc.h
index 9ea9f5c..c93cc86 100644
--- a/core/fpdfapi/page/cpdf_expintfunc.h
+++ b/core/fpdfapi/page/cpdf_expintfunc.h
@@ -8,6 +8,7 @@
 #define CORE_FPDFAPI_PAGE_CPDF_EXPINTFUNC_H_
 
 #include <set>
+#include <vector>
 
 #include "core/fpdfapi/page/cpdf_function.h"
 
@@ -23,8 +24,8 @@
 
   uint32_t m_nOrigOutputs = 0;
   float m_Exponent = 0.0f;
-  float* m_pBeginValues = nullptr;
-  float* m_pEndValues = nullptr;
+  std::vector<float> m_BeginValues;
+  std::vector<float> m_EndValues;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_EXPINTFUNC_H_
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index adc02fe..87cb178 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -363,13 +363,13 @@
   if (pFunc->m_nOrigOutputs != 3)
     return false;
   skColors->push(
-      SkColorSetARGB(0xFF, SkUnitScalarClampToByte(pFunc->m_pBeginValues[0]),
-                     SkUnitScalarClampToByte(pFunc->m_pBeginValues[1]),
-                     SkUnitScalarClampToByte(pFunc->m_pBeginValues[2])));
+      SkColorSetARGB(0xFF, SkUnitScalarClampToByte(pFunc->m_BeginValues[0]),
+                     SkUnitScalarClampToByte(pFunc->m_BeginValues[1]),
+                     SkUnitScalarClampToByte(pFunc->m_BeginValues[2])));
   skColors->push(
-      SkColorSetARGB(0xFF, SkUnitScalarClampToByte(pFunc->m_pEndValues[0]),
-                     SkUnitScalarClampToByte(pFunc->m_pEndValues[1]),
-                     SkUnitScalarClampToByte(pFunc->m_pEndValues[2])));
+      SkColorSetARGB(0xFF, SkUnitScalarClampToByte(pFunc->m_EndValues[0]),
+                     SkUnitScalarClampToByte(pFunc->m_EndValues[1]),
+                     SkUnitScalarClampToByte(pFunc->m_EndValues[2])));
   return true;
 }
 
