diff --git a/xfa/fde/cfde_txtedtpage.cpp b/xfa/fde/cfde_txtedtpage.cpp
index 4bf3e9f..c3d2143 100644
--- a/xfa/fde/cfde_txtedtpage.cpp
+++ b/xfa/fde/cfde_txtedtpage.cpp
@@ -412,24 +412,25 @@
   return m_rtPageContents;
 }
 
-FX_POSITION CFDE_TxtEdtPage::GetFirstPosition() {
-  if (m_Pieces.empty())
-    return nullptr;
-  return (FX_POSITION)1;
+size_t CFDE_TxtEdtPage::GetFirstPosition() {
+  return m_Pieces.empty() ? 0 : 1;
 }
 
-FDE_TEXTEDITPIECE* CFDE_TxtEdtPage::GetNext(FX_POSITION& pos,
+FDE_TEXTEDITPIECE* CFDE_TxtEdtPage::GetNext(size_t* pos,
                                             IFDE_VisualSet*& pVisualSet) {
+  ASSERT(pos);
+
   if (!m_pTextSet) {
-    pos = nullptr;
+    *pos = 0;
     return nullptr;
   }
-  int32_t nPos = (int32_t)(uintptr_t)pos;
+
+  size_t nPos = *pos;
   pVisualSet = m_pTextSet.get();
-  if (nPos + 1 > pdfium::CollectionSize<int32_t>(m_Pieces))
-    pos = nullptr;
+  if (nPos + 1 > m_Pieces.size())
+    *pos = 0;
   else
-    pos = (FX_POSITION)(uintptr_t)(nPos + 1);
+    *pos = nPos + 1;
 
   return &m_Pieces[nPos - 1];
 }
diff --git a/xfa/fde/cfde_txtedtpage.h b/xfa/fde/cfde_txtedtpage.h
index d249619..2cae7ce 100644
--- a/xfa/fde/cfde_txtedtpage.h
+++ b/xfa/fde/cfde_txtedtpage.h
@@ -46,8 +46,8 @@
   void UnloadPage(const CFX_RectF* pClipBox);
   const CFX_RectF& GetContentsBox();
 
-  FX_POSITION GetFirstPosition();
-  FDE_TEXTEDITPIECE* GetNext(FX_POSITION& pos, IFDE_VisualSet*& pVisualSet);
+  size_t GetFirstPosition();
+  FDE_TEXTEDITPIECE* GetNext(size_t* pos, IFDE_VisualSet*& pVisualSet);
 
   wchar_t GetChar(const FDE_TEXTEDITPIECE* pIdentity, int32_t index) const;
   int32_t GetWidth(const FDE_TEXTEDITPIECE* pIdentity, int32_t index) const;
diff --git a/xfa/fde/fde_iterator.cpp b/xfa/fde/fde_iterator.cpp
index e9a6440..ff4fc0e 100644
--- a/xfa/fde/fde_iterator.cpp
+++ b/xfa/fde/fde_iterator.cpp
@@ -19,8 +19,8 @@
   FDE_CANVASITEM canvas;
   canvas.hCanvas = nullptr;
   canvas.pCanvas = pCanvas;
-  canvas.hPos = pCanvas->GetFirstPosition();
-  if (!canvas.hPos)
+  canvas.pos = pCanvas->GetFirstPosition();
+  if (canvas.pos == 0)
     return false;
 
   m_CanvasStack.push(canvas);
@@ -39,8 +39,8 @@
   FDE_CANVASITEM* pCanvas = &m_CanvasStack.top();
   ASSERT(pCanvas && pCanvas->pCanvas);
 
-  pCanvas->hPos = pCanvas->pCanvas->GetFirstPosition();
-  return !!pCanvas->hPos;
+  pCanvas->pos = pCanvas->pCanvas->GetFirstPosition();
+  return pCanvas->pos != 0;
 }
 
 void CFDE_VisualSetIterator::Reset() {
@@ -53,7 +53,7 @@
     CFDE_TxtEdtPage** ppCanvasSet) {
   while (!m_CanvasStack.empty()) {
     FDE_CANVASITEM* pCanvas = &m_CanvasStack.top();
-    if (!pCanvas->hPos) {
+    if (pCanvas->pos == 0) {
       if (m_CanvasStack.size() == 1)
         break;
 
@@ -62,7 +62,7 @@
     }
     do {
       FDE_TEXTEDITPIECE* pObj =
-          pCanvas->pCanvas->GetNext(pCanvas->hPos, pVisualSet);
+          pCanvas->pCanvas->GetNext(&pCanvas->pos, pVisualSet);
       ASSERT(pObj);
 
       FDE_VISUALOBJTYPE eType = pVisualSet->GetType();
@@ -70,7 +70,7 @@
         FDE_CANVASITEM canvas;
         canvas.hCanvas = pObj;
         canvas.pCanvas = static_cast<CFDE_TxtEdtPage*>(pVisualSet);
-        canvas.hPos = canvas.pCanvas->GetFirstPosition();
+        canvas.pos = canvas.pCanvas->GetFirstPosition();
         m_CanvasStack.push(canvas);
         break;
       }
@@ -82,7 +82,7 @@
           *phCanvasObj = pCanvas->hCanvas;
         return pObj;
       }
-    } while (pCanvas->hPos);
+    } while (pCanvas->pos != 0);
   }
   if (ppCanvasSet)
     *ppCanvasSet = nullptr;
diff --git a/xfa/fde/fde_iterator.h b/xfa/fde/fde_iterator.h
index 95785e4..99f9597 100644
--- a/xfa/fde/fde_iterator.h
+++ b/xfa/fde/fde_iterator.h
@@ -16,7 +16,7 @@
 struct FDE_CANVASITEM {
   CFDE_TxtEdtPage* pCanvas;
   FDE_TEXTEDITPIECE* hCanvas;
-  FX_POSITION hPos;
+  size_t pos;
 };
 
 class CFDE_VisualSetIterator {
