diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index 1f2740e..5d079a3 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -142,20 +142,13 @@
   return ToArray(GetDirectObjectAt(i));
 }
 
-void CPDF_Array::RemoveAt(size_t i) {
-  if (i < m_Objects.size())
-    m_Objects.erase(m_Objects.begin() + i);
-}
-
 void CPDF_Array::Clear() {
   m_Objects.clear();
 }
 
-void CPDF_Array::Truncate(size_t nNewSize) {
-  if (nNewSize >= m_Objects.size())
-    return;
-
-  m_Objects.resize(nNewSize);
+void CPDF_Array::RemoveAt(size_t i) {
+  if (i < m_Objects.size())
+    m_Objects.erase(m_Objects.begin() + i);
 }
 
 void CPDF_Array::ConvertToIndirectObjectAt(size_t i,
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 2590971..ed5d3e3 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -100,9 +100,8 @@
         index, pdfium::MakeUnique<T>(m_pPool, std::forward<Args>(args)...)));
   }
 
-  void RemoveAt(size_t index);
   void Clear();
-  void Truncate(size_t nNewSize);
+  void RemoveAt(size_t index);
   void ConvertToIndirectObjectAt(size_t index, CPDF_IndirectObjectHolder* pDoc);
 
   const_iterator begin() const { return m_Objects.begin(); }
diff --git a/core/fpdfapi/parser/cpdf_array_unittest.cpp b/core/fpdfapi/parser/cpdf_array_unittest.cpp
index 006e5fa..4ce66dc 100644
--- a/core/fpdfapi/parser/cpdf_array_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_array_unittest.cpp
@@ -53,32 +53,6 @@
   EXPECT_EQ(0U, arr->GetCount());
 }
 
-TEST(cpdf_array, Truncate) {
-  {
-    const int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-    auto arr = pdfium::MakeUnique<CPDF_Array>();
-    for (size_t i = 0; i < FX_ArraySize(elems); ++i)
-      arr->AddNew<CPDF_Number>(elems[i]);
-    arr->Truncate(4);
-    const int expected[] = {1, 2, 3, 4};
-    ASSERT_EQ(FX_ArraySize(expected), arr->GetCount());
-    for (size_t i = 0; i < FX_ArraySize(expected); ++i)
-      EXPECT_EQ(expected[i], arr->GetIntegerAt(i));
-    arr->Truncate(0);
-    EXPECT_EQ(0U, arr->GetCount());
-  }
-  {
-    // When the range is out of bound, Truncate() has no effect.
-    // It does not try to grow the array.
-    const int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-    auto arr = pdfium::MakeUnique<CPDF_Array>();
-    for (size_t i = 0; i < FX_ArraySize(elems); ++i)
-      arr->AddNew<CPDF_Number>(elems[i]);
-    arr->Truncate(11);
-    EXPECT_EQ(FX_ArraySize(elems), arr->GetCount());
-  }
-}
-
 TEST(cpdf_array, InsertAt) {
   {
     const int elems[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
