diff --git a/core/fxge/cfx_folderfontinfo.cpp b/core/fxge/cfx_folderfontinfo.cpp
index 8df44f5..8da1719 100644
--- a/core/fxge/cfx_folderfontinfo.cpp
+++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -359,9 +359,9 @@
   return it != m_FontList.end() ? it->second.get() : nullptr;
 }
 
-uint32_t CFX_FolderFontInfo::GetFontData(void* hFont,
-                                         uint32_t table,
-                                         pdfium::span<uint8_t> buffer) {
+size_t CFX_FolderFontInfo::GetFontData(void* hFont,
+                                       uint32_t table,
+                                       pdfium::span<uint8_t> buffer) {
   if (!hFont)
     return 0;
 
diff --git a/core/fxge/cfx_folderfontinfo.h b/core/fxge/cfx_folderfontinfo.h
index d1ce84a..e99a4be 100644
--- a/core/fxge/cfx_folderfontinfo.h
+++ b/core/fxge/cfx_folderfontinfo.h
@@ -38,9 +38,9 @@
                 int pitch_family,
                 const ByteString& face) override;
   void* GetFont(const ByteString& face) override;
-  uint32_t GetFontData(void* hFont,
-                       uint32_t table,
-                       pdfium::span<uint8_t> buffer) override;
+  size_t GetFontData(void* hFont,
+                     uint32_t table,
+                     pdfium::span<uint8_t> buffer) override;
   void DeleteFont(void* hFont) override;
   bool GetFaceName(void* hFont, ByteString* name) override;
   bool GetFontCharset(void* hFont, FX_Charset* charset) override;
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 7a5694d..af21273 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -301,12 +301,12 @@
 }
 
 ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) {
-  uint32_t size = m_pFontInfo->GetFontData(hFont, kTableNAME, {});
+  size_t size = m_pFontInfo->GetFontData(hFont, kTableNAME, {});
   if (!size)
     return ByteString();
 
   std::vector<uint8_t, FxAllocAllocator<uint8_t>> buffer(size);
-  uint32_t bytes_read = m_pFontInfo->GetFontData(hFont, kTableNAME, buffer);
+  size_t bytes_read = m_pFontInfo->GetFontData(hFont, kTableNAME, buffer);
   return bytes_read == size ? GetNameFromTT(buffer, 6) : ByteString();
 }
 
@@ -639,8 +639,8 @@
   m_pFontInfo->GetFaceName(hFont, &SubstName);
   if (Charset == FX_Charset::kDefault)
     m_pFontInfo->GetFontCharset(hFont, &Charset);
-  uint32_t ttc_size = m_pFontInfo->GetFontData(hFont, kTableTTCF, {});
-  uint32_t font_size = m_pFontInfo->GetFontData(hFont, 0, {});
+  size_t ttc_size = m_pFontInfo->GetFontData(hFont, kTableTTCF, {});
+  size_t font_size = m_pFontInfo->GetFontData(hFont, 0, {});
   if (font_size == 0 && ttc_size == 0) {
     m_pFontInfo->DeleteFont(hFont);
     return nullptr;
@@ -726,7 +726,7 @@
   if (!hFont)
     return nullptr;
 
-  uint32_t required_size = m_pFontInfo->GetFontData(hFont, 0, {});
+  size_t required_size = m_pFontInfo->GetFontData(hFont, 0, {});
   if (required_size == 0)
     return nullptr;
 
@@ -739,8 +739,8 @@
 #endif  // PDF_ENABLE_XFA
 
 RetainPtr<CFX_Face> CFX_FontMapper::GetCachedTTCFace(void* hFont,
-                                                     uint32_t ttc_size,
-                                                     uint32_t font_size) {
+                                                     size_t ttc_size,
+                                                     size_t data_size) {
   uint32_t checksum = GetChecksumFromTT(hFont);
   RetainPtr<CFX_FontMgr::FontDesc> pFontDesc =
       m_pFontMgr->GetCachedTTCFontDesc(ttc_size, checksum);
@@ -751,9 +751,9 @@
     pFontDesc = m_pFontMgr->AddCachedTTCFontDesc(
         ttc_size, checksum, std::move(pFontData), ttc_size);
   }
-  DCHECK(ttc_size >= font_size);
-  uint32_t font_offset = ttc_size - font_size;
-  int face_index =
+  CHECK(ttc_size >= data_size);
+  size_t font_offset = ttc_size - data_size;
+  size_t face_index =
       GetTTCIndex(pFontDesc->FontData().first(ttc_size), font_offset);
   RetainPtr<CFX_Face> pFace(pFontDesc->GetFace(face_index));
   if (pFace)
@@ -772,22 +772,22 @@
                                                   ByteString SubstName,
                                                   int weight,
                                                   bool bItalic,
-                                                  uint32_t font_size) {
+                                                  size_t data_size) {
   RetainPtr<CFX_FontMgr::FontDesc> pFontDesc =
       m_pFontMgr->GetCachedFontDesc(SubstName, weight, bItalic);
   if (!pFontDesc) {
     std::unique_ptr<uint8_t, FxFreeDeleter> pFontData(
-        FX_Alloc(uint8_t, font_size));
-    m_pFontInfo->GetFontData(hFont, 0, {pFontData.get(), font_size});
+        FX_Alloc(uint8_t, data_size));
+    m_pFontInfo->GetFontData(hFont, 0, {pFontData.get(), data_size});
     pFontDesc = m_pFontMgr->AddCachedFontDesc(SubstName, weight, bItalic,
-                                              std::move(pFontData), font_size);
+                                              std::move(pFontData), data_size);
   }
   RetainPtr<CFX_Face> pFace(pFontDesc->GetFace(0));
   if (pFace)
     return pFace;
 
   pFace = m_pFontMgr->NewFixedFace(pFontDesc,
-                                   pFontDesc->FontData().first(font_size), 0);
+                                   pFontDesc->FontData().first(data_size), 0);
   if (!pFace)
     return nullptr;
 
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 183e59c..2ad6c3e 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -98,13 +98,13 @@
                                        int weight,
                                        int pitch_family);
   RetainPtr<CFX_Face> GetCachedTTCFace(void* hFont,
-                                       uint32_t ttc_size,
-                                       uint32_t font_size);
+                                       size_t ttc_size,
+                                       size_t data_size);
   RetainPtr<CFX_Face> GetCachedFace(void* hFont,
                                     ByteString SubstName,
                                     int weight,
                                     bool bItalic,
-                                    uint32_t font_size);
+                                    size_t data_size);
 
   struct FaceData {
     ByteString name;
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 8513001..0775982 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -57,8 +57,8 @@
   return key;
 }
 
-ByteString KeyNameFromSize(int ttc_size, uint32_t checksum) {
-  return ByteString::Format("%d:%d", ttc_size, checksum);
+ByteString KeyNameFromSize(size_t ttc_size, uint32_t checksum) {
+  return ByteString::Format("%zu:%u", ttc_size, checksum);
 }
 
 FXFT_LibraryRec* FTLibraryInitHelper() {
@@ -106,24 +106,24 @@
     int weight,
     bool bItalic,
     std::unique_ptr<uint8_t, FxFreeDeleter> pData,
-    uint32_t size) {
+    size_t size) {
   auto pFontDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
   m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)].Reset(pFontDesc.Get());
   return pFontDesc;
 }
 
 RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::GetCachedTTCFontDesc(
-    int ttc_size,
+    size_t ttc_size,
     uint32_t checksum) {
   auto it = m_FaceMap.find(KeyNameFromSize(ttc_size, checksum));
   return it != m_FaceMap.end() ? pdfium::WrapRetain(it->second.Get()) : nullptr;
 }
 
 RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::AddCachedTTCFontDesc(
-    int ttc_size,
+    size_t ttc_size,
     uint32_t checksum,
     std::unique_ptr<uint8_t, FxFreeDeleter> pData,
-    uint32_t size) {
+    size_t size) {
   auto pNewDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size);
   m_FaceMap[KeyNameFromSize(ttc_size, checksum)].Reset(pNewDesc.Get());
   return pNewDesc;
@@ -131,9 +131,9 @@
 
 RetainPtr<CFX_Face> CFX_FontMgr::NewFixedFace(const RetainPtr<FontDesc>& pDesc,
                                               pdfium::span<const uint8_t> span,
-                                              int face_index) {
-  RetainPtr<CFX_Face> face =
-      CFX_Face::New(m_FTLibrary.get(), pDesc, span, face_index);
+                                              size_t face_index) {
+  RetainPtr<CFX_Face> face = CFX_Face::New(m_FTLibrary.get(), pDesc, span,
+                                           static_cast<FT_Long>(face_index));
   if (!face)
     return nullptr;
 
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index d53d1e6..83ee22c 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -7,6 +7,9 @@
 #ifndef CORE_FXGE_CFX_FONTMGR_H_
 #define CORE_FXGE_CFX_FONTMGR_H_
 
+#include <stddef.h>
+#include <stdint.h>
+
 #include <map>
 #include <memory>
 
@@ -57,18 +60,18 @@
       int weight,
       bool bItalic,
       std::unique_ptr<uint8_t, FxFreeDeleter> pData,
-      uint32_t size);
+      size_t size);
 
-  RetainPtr<FontDesc> GetCachedTTCFontDesc(int ttc_size, uint32_t checksum);
+  RetainPtr<FontDesc> GetCachedTTCFontDesc(size_t ttc_size, uint32_t checksum);
   RetainPtr<FontDesc> AddCachedTTCFontDesc(
-      int ttc_size,
+      size_t ttc_size,
       uint32_t checksum,
       std::unique_ptr<uint8_t, FxFreeDeleter> pData,
-      uint32_t size);
+      size_t size);
 
   RetainPtr<CFX_Face> NewFixedFace(const RetainPtr<FontDesc>& pDesc,
                                    pdfium::span<const uint8_t> span,
-                                   int face_index);
+                                   size_t face_index);
 
   // Always present.
   CFX_FontMapper* GetBuiltinMapper() const { return m_pBuiltinMapper.get(); }
diff --git a/core/fxge/fx_font.cpp b/core/fxge/fx_font.cpp
index a80aeda91..4f5ea68 100644
--- a/core/fxge/fx_font.cpp
+++ b/core/fxge/fx_font.cpp
@@ -130,11 +130,10 @@
   return ByteString();
 }
 
-int GetTTCIndex(pdfium::span<const uint8_t> pFontData, uint32_t font_offset) {
+size_t GetTTCIndex(pdfium::span<const uint8_t> pFontData, size_t font_offset) {
   const uint8_t* p = pFontData.data() + 8;
-  uint32_t nfont = FXSYS_UINT32_GET_MSBFIRST(p);
-  uint32_t index;
-  for (index = 0; index < nfont; index++) {
+  size_t nfont = FXSYS_UINT32_GET_MSBFIRST(p);
+  for (size_t index = 0; index < nfont; index++) {
     p = pFontData.data() + 12 + index * 4;
     if (FXSYS_UINT32_GET_MSBFIRST(p) == font_offset)
       return index;
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index aa5c789..ca8d470 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -49,7 +49,7 @@
 FX_RECT GetGlyphsBBox(const std::vector<TextGlyphPos>& glyphs, int anti_alias);
 
 ByteString GetNameFromTT(pdfium::span<const uint8_t> name_table, uint32_t name);
-int GetTTCIndex(pdfium::span<const uint8_t> pFontData, uint32_t font_offset);
+size_t GetTTCIndex(pdfium::span<const uint8_t> pFontData, size_t font_offset);
 
 inline bool FontStyleIsForceBold(uint32_t style) {
   return !!(style & FXFONT_FORCE_BOLD);
diff --git a/core/fxge/systemfontinfo_iface.h b/core/fxge/systemfontinfo_iface.h
index f6c3623..dfa1e54 100644
--- a/core/fxge/systemfontinfo_iface.h
+++ b/core/fxge/systemfontinfo_iface.h
@@ -7,6 +7,9 @@
 #ifndef CORE_FXGE_SYSTEMFONTINFO_IFACE_H_
 #define CORE_FXGE_SYSTEMFONTINFO_IFACE_H_
 
+#include <stddef.h>
+#include <stdint.h>
+
 #include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/fx_codepage_forward.h"
 #include "core/fxge/cfx_fontmapper.h"
@@ -26,9 +29,9 @@
                         int pitch_family,
                         const ByteString& face) = 0;
   virtual void* GetFont(const ByteString& face) = 0;
-  virtual uint32_t GetFontData(void* hFont,
-                               uint32_t table,
-                               pdfium::span<uint8_t> buffer) = 0;
+  virtual size_t GetFontData(void* hFont,
+                             uint32_t table,
+                             pdfium::span<uint8_t> buffer) = 0;
   virtual bool GetFaceName(void* hFont, ByteString* name) = 0;
   virtual bool GetFontCharset(void* hFont, FX_Charset* charset) = 0;
   virtual void DeleteFont(void* hFont) = 0;
diff --git a/core/fxge/win32/cwin32_platform.cpp b/core/fxge/win32/cwin32_platform.cpp
index 5e9dc83..448ca54 100644
--- a/core/fxge/win32/cwin32_platform.cpp
+++ b/core/fxge/win32/cwin32_platform.cpp
@@ -96,9 +96,9 @@
                 int pitch_family,
                 const ByteString& face) override;
   void* GetFont(const ByteString& face) override { return nullptr; }
-  uint32_t GetFontData(void* hFont,
-                       uint32_t table,
-                       pdfium::span<uint8_t> buffer) override;
+  size_t GetFontData(void* hFont,
+                     uint32_t table,
+                     pdfium::span<uint8_t> buffer) override;
   bool GetFaceName(void* hFont, ByteString* name) override;
   bool GetFontCharset(void* hFont, FX_Charset* charset) override;
   void DeleteFont(void* hFont) override;
@@ -135,7 +135,7 @@
 bool CFX_Win32FontInfo::IsOpenTypeFromDiv(const LOGFONTA* plf) {
   HFONT hFont = CreateFontIndirectA(plf);
   bool ret = false;
-  uint32_t font_size = GetFontData(hFont, 0, {});
+  size_t font_size = GetFontData(hFont, 0, {});
   if (font_size != GDI_ERROR && font_size >= sizeof(uint32_t)) {
     uint32_t lVersion = 0;
     GetFontData(hFont, 0, {(uint8_t*)(&lVersion), sizeof(uint32_t)});
@@ -156,7 +156,7 @@
 bool CFX_Win32FontInfo::IsSupportFontFormDiv(const LOGFONTA* plf) {
   HFONT hFont = CreateFontIndirectA(plf);
   bool ret = false;
-  uint32_t font_size = GetFontData(hFont, 0, {});
+  size_t font_size = GetFontData(hFont, 0, {});
   if (font_size != GDI_ERROR && font_size >= sizeof(uint32_t)) {
     uint32_t lVersion = 0;
     GetFontData(hFont, 0, {(uint8_t*)(&lVersion), sizeof(lVersion)});
@@ -396,14 +396,13 @@
   ::DeleteObject(hFont);
 }
 
-uint32_t CFX_Win32FontInfo::GetFontData(void* hFont,
-                                        uint32_t table,
-                                        pdfium::span<uint8_t> buffer) {
+size_t CFX_Win32FontInfo::GetFontData(void* hFont,
+                                      uint32_t table,
+                                      pdfium::span<uint8_t> buffer) {
   HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
   table = FXSYS_UINT32_GET_MSBFIRST(reinterpret_cast<uint8_t*>(&table));
-  uint32_t size =
-      ::GetFontData(m_hDC, table, 0, buffer.data(),
-                    pdfium::base::checked_cast<DWORD>(buffer.size()));
+  size_t size = ::GetFontData(m_hDC, table, 0, buffer.data(),
+                              pdfium::base::checked_cast<DWORD>(buffer.size()));
   ::SelectObject(m_hDC, hOldFont);
   if (size == GDI_ERROR) {
     return 0;
diff --git a/fpdfsdk/fpdf_sysfontinfo.cpp b/fpdfsdk/fpdf_sysfontinfo.cpp
index 0cf14de..3ab7ba5 100644
--- a/fpdfsdk/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/fpdf_sysfontinfo.cpp
@@ -100,9 +100,9 @@
     return m_pInfo->GetFont(m_pInfo, family.c_str());
   }
 
-  uint32_t GetFontData(void* hFont,
-                       uint32_t table,
-                       pdfium::span<uint8_t> buffer) override {
+  size_t GetFontData(void* hFont,
+                     uint32_t table,
+                     pdfium::span<uint8_t> buffer) override {
     if (!m_pInfo->GetFontData)
       return 0;
     return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer.data(),
diff --git a/testing/test_fonts.cpp b/testing/test_fonts.cpp
index 2f15f90..452946f 100644
--- a/testing/test_fonts.cpp
+++ b/testing/test_fonts.cpp
@@ -4,6 +4,8 @@
 
 #include "testing/test_fonts.h"
 
+#include <utility>
+
 #include "core/fxge/cfx_fontmapper.h"
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
@@ -59,9 +61,9 @@
   void* GetFont(const ByteString& face) override {
     return impl_->GetFont(RenameFontForTesting(face));
   }
-  uint32_t GetFontData(void* hFont,
-                       uint32_t table,
-                       pdfium::span<uint8_t> buffer) override {
+  size_t GetFontData(void* hFont,
+                     uint32_t table,
+                     pdfium::span<uint8_t> buffer) override {
     return impl_->GetFontData(hFont, table, buffer);
   }
   bool GetFaceName(void* hFont, ByteString* name) override {
