Enforce -Wshorten-64-to-32 on core/fpdfapi/render

- Widen one variable to size_t as needed.
- Shorten one variable to uint32_t to be compatible with subsequent
  calculations, but provide checked cast.

Change-Id: I594270c40f65317adf320d5f2a859cfa1023283c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/90171
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/BUILD.gn b/core/fpdfapi/render/BUILD.gn
index 33b800b..ab33f91 100644
--- a/core/fpdfapi/render/BUILD.gn
+++ b/core/fpdfapi/render/BUILD.gn
@@ -44,6 +44,7 @@
     "cpdf_type3glyphmap.cpp",
     "cpdf_type3glyphmap.h",
   ]
+  cflags = []
   configs += [ "../../../:pdfium_strict_config" ]
   deps = [
     "../../../constants",
@@ -54,13 +55,16 @@
     "../page",
     "../parser",
   ]
+  visibility = [ "../../../*" ]
+  if (is_clang) {
+    cflags += [ "-Wshorten-64-to-32" ]
+  }
   if (is_win) {
     sources += [
       "cpdf_windowsrenderdevice.cpp",
       "cpdf_windowsrenderdevice.h",
     ]
   }
-  visibility = [ "../../../*" ]
 }
 
 pdfium_unittest_source_set("unittests") {
diff --git a/core/fpdfapi/render/cpdf_pagerendercache.cpp b/core/fpdfapi/render/cpdf_pagerendercache.cpp
index dc5ebe7..5cce8e0 100644
--- a/core/fpdfapi/render/cpdf_pagerendercache.cpp
+++ b/core/fpdfapi/render/cpdf_pagerendercache.cpp
@@ -13,6 +13,7 @@
 #include "core/fpdfapi/page/cpdf_page.h"
 #include "core/fpdfapi/render/cpdf_imagecacheentry.h"
 #include "core/fpdfapi/render/cpdf_renderstatus.h"
+#include "core/fxcrt/stl_util.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 
 namespace {
@@ -36,7 +37,7 @@
   if (m_nCacheSize <= (uint32_t)dwLimitCacheSize)
     return;
 
-  size_t nCount = m_ImageCache.size();
+  uint32_t nCount = fxcrt::CollectionSize<uint32_t>(m_ImageCache);
   std::vector<CacheInfo> cache_info;
   cache_info.reserve(nCount);
   for (const auto& it : m_ImageCache) {
@@ -49,7 +50,7 @@
   // The comparison is legal because uint32_t is an unsigned type.
   uint32_t nTimeCount = m_nTimeCount;
   if (nTimeCount + 1 < nTimeCount) {
-    for (size_t i = 0; i < nCount; i++)
+    for (uint32_t i = 0; i < nCount; i++)
       m_ImageCache[cache_info[i].pStream]->SetTimeCount(i);
     m_nTimeCount = nCount;
   }
diff --git a/core/fpdfapi/render/cpdf_textrenderer.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp
index bd48888..22dc40b 100644
--- a/core/fpdfapi/render/cpdf_textrenderer.cpp
+++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -106,8 +106,8 @@
   if (pFont->IsType3Font())
     return;
 
-  int nChars = pFont->CountChar(str.AsStringView());
-  if (nChars <= 0)
+  size_t nChars = pFont->CountChar(str.AsStringView());
+  if (nChars == 0)
     return;
 
   size_t offset = 0;
@@ -116,7 +116,7 @@
   codes.resize(nChars);
   positions.resize(nChars - 1);
   float cur_pos = 0;
-  for (int i = 0; i < nChars; i++) {
+  for (size_t i = 0; i < nChars; i++) {
     codes[i] = pFont->GetNextChar(str.AsStringView(), &offset);
     if (i)
       positions[i - 1] = cur_pos;