Convert to std::array<> in CPDF_SimpleFont.

Use more modern types to get libc++ hardening "for free".

Change-Id: I30b0822738f787055cc1742a74eb707a88c380e1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/118812
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index 29a89f8..dee1a0a 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -4,11 +4,6 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#if defined(UNSAFE_BUFFERS_BUILD)
-// TODO(crbug.com/pdfium/2153): resolve buffer safety issues.
-#pragma allow_unsafe_buffers
-#endif
-
 #include "core/fpdfapi/font/cpdf_simplefont.h"
 
 #include <algorithm>
@@ -41,10 +36,9 @@
 CPDF_SimpleFont::CPDF_SimpleFont(CPDF_Document* pDocument,
                                  RetainPtr<CPDF_Dictionary> pFontDict)
     : CPDF_Font(pDocument, std::move(pFontDict)) {
-  memset(m_CharWidth, 0xff, sizeof(m_CharWidth));
-  memset(m_GlyphIndex, 0xff, sizeof(m_GlyphIndex));
-  for (size_t i = 0; i < std::size(m_CharBBox); ++i)
-    m_CharBBox[i] = FX_RECT(-1, -1, -1, -1);
+  m_CharWidth.fill(0xffff);
+  m_GlyphIndex.fill(0xffff);
+  m_CharBBox.fill(FX_RECT(-1, -1, -1, -1));
 }
 
 CPDF_SimpleFont::~CPDF_SimpleFont() = default;
@@ -248,14 +242,13 @@
   }
 
   if (FontStyleIsAllCaps(m_Flags)) {
-    static const unsigned char kLowercases[][2] = {
-        {'a', 'z'}, {0xe0, 0xf6}, {0xf8, 0xfd}};
-    for (size_t range = 0; range < std::size(kLowercases); ++range) {
-      const auto& lower = kLowercases[range];
-      for (int i = lower[0]; i <= lower[1]; ++i) {
-        if (m_GlyphIndex[i] != 0xffff && m_pFontFile)
+    static const std::array<std::pair<uint8_t, uint8_t>, 3> kLowercases = {
+        {{'a', 'z'}, {0xe0, 0xf6}, {0xf8, 0xfd}}};
+    for (const auto& lower : kLowercases) {
+      for (int i = lower.first; i <= lower.second; ++i) {
+        if (m_GlyphIndex[i] != 0xffff && m_pFontFile) {
           continue;
-
+        }
         int j = i - 32;
         m_GlyphIndex[i] = m_GlyphIndex[j];
         if (m_CharWidth[j]) {
diff --git a/core/fpdfapi/font/cpdf_simplefont.h b/core/fpdfapi/font/cpdf_simplefont.h
index e0d0400..23bd6ff 100644
--- a/core/fpdfapi/font/cpdf_simplefont.h
+++ b/core/fpdfapi/font/cpdf_simplefont.h
@@ -9,6 +9,7 @@
 
 #include <stdint.h>
 
+#include <array>
 #include <vector>
 
 #include "core/fpdfapi/font/cpdf_font.h"
@@ -50,9 +51,9 @@
   FontEncoding m_BaseEncoding = FontEncoding::kBuiltin;
   bool m_bUseFontWidth = false;
   std::vector<ByteString> m_CharNames;
-  uint16_t m_GlyphIndex[kInternalTableSize];
-  uint16_t m_CharWidth[kInternalTableSize];
-  FX_RECT m_CharBBox[kInternalTableSize];
+  std::array<uint16_t, kInternalTableSize> m_GlyphIndex;
+  std::array<uint16_t, kInternalTableSize> m_CharWidth;
+  std::array<FX_RECT, kInternalTableSize> m_CharBBox;
 };
 
 #endif  // CORE_FPDFAPI_FONT_CPDF_SIMPLEFONT_H_
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index 5123121..5745b49 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -245,7 +245,7 @@
   if (start_char < 0 || start_char > 255)
     return;
 
-  auto* it = std::begin(m_GlyphIndex);
+  auto it = std::begin(m_GlyphIndex);
   std::fill(it, it + start_char, 0);
   uint16_t glyph = 3;
   for (int charcode = start_char; charcode < 256; charcode++, glyph++)
diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
index 50efda7..e87b1ed 100644
--- a/core/fpdfapi/font/cpdf_type1font.cpp
+++ b/core/fpdfapi/font/cpdf_type1font.cpp
@@ -76,7 +76,7 @@
                                RetainPtr<CPDF_Dictionary> pFontDict)
     : CPDF_SimpleFont(pDocument, std::move(pFontDict)) {
 #if BUILDFLAG(IS_APPLE)
-  memset(m_ExtGID, 0xff, sizeof(m_ExtGID));
+  m_ExtGID.fill(0xffff);
 #endif
 }
 
@@ -168,8 +168,9 @@
       }
       if (bGotOne) {
 #if BUILDFLAG(IS_APPLE)
-        if (!bCoreText)
-          memcpy(m_ExtGID, m_GlyphIndex, sizeof(m_ExtGID));
+        if (!bCoreText) {
+          m_ExtGID = m_GlyphIndex;
+        }
 #endif
         return;
       }
@@ -200,8 +201,7 @@
     }
 #if BUILDFLAG(IS_APPLE)
     if (!bCoreText) {
-      fxcrt::spancpy(pdfium::make_span(m_ExtGID),
-                     pdfium::make_span(m_GlyphIndex));
+      m_ExtGID = m_GlyphIndex;
     }
 #endif
     return;
@@ -281,8 +281,9 @@
       }
     }
 #if BUILDFLAG(IS_APPLE)
-    if (!bCoreText)
-      memcpy(m_ExtGID, m_GlyphIndex, sizeof(m_ExtGID));
+    if (!bCoreText) {
+      m_ExtGID = m_GlyphIndex;
+    }
 #endif
     return;
   }
@@ -309,8 +310,9 @@
     }
   }
 #if BUILDFLAG(IS_APPLE)
-  if (!bCoreText)
-    memcpy(m_ExtGID, m_GlyphIndex, sizeof(m_ExtGID));
+  if (!bCoreText) {
+    m_ExtGID = m_GlyphIndex;
+  }
 #endif
 }
 
diff --git a/core/fpdfapi/font/cpdf_type1font.h b/core/fpdfapi/font/cpdf_type1font.h
index 60e1ffa..c9ad6a2 100644
--- a/core/fpdfapi/font/cpdf_type1font.h
+++ b/core/fpdfapi/font/cpdf_type1font.h
@@ -9,6 +9,8 @@
 
 #include <stdint.h>
 
+#include <array>
+
 #include "build/build_config.h"
 #include "core/fpdfapi/font/cpdf_simplefont.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -46,7 +48,7 @@
   void SetExtGID(const char* name, uint32_t charcode);
   void CalcExtGID(uint32_t charcode);
 
-  uint16_t m_ExtGID[kInternalTableSize];
+  std::array<uint16_t, kInternalTableSize> m_ExtGID;
 #endif
 
   std::optional<CFX_FontMapper::StandardFont> m_Base14Font;