diff --git a/core/fpdfapi/page/cpdf_contentmark.cpp b/core/fpdfapi/page/cpdf_contentmark.cpp
index b28d4ea..1d70ede 100644
--- a/core/fpdfapi/page/cpdf_contentmark.cpp
+++ b/core/fpdfapi/page/cpdf_contentmark.cpp
@@ -9,7 +9,6 @@
 #include <utility>
 
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "third_party/base/stl_util.h"
 
 CPDF_ContentMark::CPDF_ContentMark() {}
 
@@ -18,11 +17,11 @@
 
 CPDF_ContentMark::~CPDF_ContentMark() {}
 
-int CPDF_ContentMark::CountItems() const {
+size_t CPDF_ContentMark::CountItems() const {
   return m_Ref.GetObject()->CountItems();
 }
 
-const CPDF_ContentMarkItem& CPDF_ContentMark::GetItem(int i) const {
+const CPDF_ContentMarkItem& CPDF_ContentMark::GetItem(size_t i) const {
   return m_Ref.GetObject()->GetItem(i);
 }
 
@@ -45,12 +44,12 @@
 
 CPDF_ContentMark::MarkData::~MarkData() {}
 
-int CPDF_ContentMark::MarkData::CountItems() const {
-  return pdfium::CollectionSize<int>(m_Marks);
+size_t CPDF_ContentMark::MarkData::CountItems() const {
+  return m_Marks.size();
 }
 
 const CPDF_ContentMarkItem& CPDF_ContentMark::MarkData::GetItem(
-    int index) const {
+    size_t index) const {
   return m_Marks[index];
 }
 
diff --git a/core/fpdfapi/page/cpdf_contentmark.h b/core/fpdfapi/page/cpdf_contentmark.h
index f9a8910..cb22737 100644
--- a/core/fpdfapi/page/cpdf_contentmark.h
+++ b/core/fpdfapi/page/cpdf_contentmark.h
@@ -21,8 +21,8 @@
   CPDF_ContentMark(const CPDF_ContentMark& that);
   ~CPDF_ContentMark();
 
-  int CountItems() const;
-  const CPDF_ContentMarkItem& GetItem(int i) const;
+  size_t CountItems() const;
+  const CPDF_ContentMarkItem& GetItem(size_t i) const;
 
   void AddMark(const ByteString& name, CPDF_Dictionary* pDict, bool bDirect);
   void DeleteLastMark();
@@ -36,8 +36,8 @@
     MarkData(const MarkData& src);
     ~MarkData();
 
-    int CountItems() const;
-    const CPDF_ContentMarkItem& GetItem(int index) const;
+    size_t CountItems() const;
+    const CPDF_ContentMarkItem& GetItem(size_t index) const;
 
     void AddMark(const ByteString& name,
                  CPDF_Dictionary* pDict,
diff --git a/core/fpdfdoc/cpdf_occontext.cpp b/core/fpdfdoc/cpdf_occontext.cpp
index 069292c..e596909 100644
--- a/core/fpdfdoc/cpdf_occontext.cpp
+++ b/core/fpdfdoc/cpdf_occontext.cpp
@@ -181,7 +181,7 @@
 }
 
 bool CPDF_OCContext::CheckObjectVisible(const CPDF_PageObject* pObj) {
-  for (int i = 0; i < pObj->m_ContentMark.CountItems(); i++) {
+  for (size_t i = 0; i < pObj->m_ContentMark.CountItems(); ++i) {
     const CPDF_ContentMarkItem& item = pObj->m_ContentMark.GetItem(i);
     if (item.GetName() == "OC" &&
         item.GetParamType() == CPDF_ContentMarkItem::PropertiesDict &&
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 485fba2..edd5456 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -810,16 +810,15 @@
   if (!pTextObj->m_ContentMark.HasRef())
     return FPDFText_MarkedContent::Pass;
 
-  int nContentMark = pTextObj->m_ContentMark.CountItems();
+  size_t nContentMark = pTextObj->m_ContentMark.CountItems();
   if (nContentMark < 1)
     return FPDFText_MarkedContent::Pass;
 
   WideString actText;
   bool bExist = false;
   CPDF_Dictionary* pDict = nullptr;
-  int n = 0;
-  for (n = 0; n < nContentMark; n++) {
-    const CPDF_ContentMarkItem& item = pTextObj->m_ContentMark.GetItem(n);
+  for (size_t i = 0; i < nContentMark; ++i) {
+    const CPDF_ContentMarkItem& item = pTextObj->m_ContentMark.GetItem(i);
     pDict = item.GetParam();
     if (!pDict)
       continue;
@@ -832,10 +831,12 @@
   if (!bExist)
     return FPDFText_MarkedContent::Pass;
 
-  if (m_pPreTextObj && m_pPreTextObj->m_ContentMark.HasRef() &&
-      m_pPreTextObj->m_ContentMark.CountItems() == n &&
-      pDict == m_pPreTextObj->m_ContentMark.GetItem(n - 1).GetParam()) {
-    return FPDFText_MarkedContent::Done;
+  if (m_pPreTextObj) {
+    const CPDF_ContentMark& mark = m_pPreTextObj->m_ContentMark;
+    if (mark.HasRef() && mark.CountItems() == nContentMark &&
+        mark.GetItem(nContentMark - 1).GetParam() == pDict) {
+      return FPDFText_MarkedContent::Done;
+    }
   }
 
   if (actText.IsEmpty())
