Use more spans in font loading code.

Fix more nits in the file along the way.

Change-Id: I9b4792a2fe082574065432de32d711201dd508cd
Reviewed-on: https://pdfium-review.googlesource.com/c/47230
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index 3e1067d..ca4d6f7 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -60,8 +60,7 @@
 CPDF_Dictionary* LoadFontDesc(CPDF_Document* pDoc,
                               const ByteString& font_name,
                               CFX_Font* pFont,
-                              const uint8_t* data,
-                              uint32_t size,
+                              pdfium::span<const uint8_t> span,
                               int font_type) {
   CPDF_Dictionary* pFontDesc = pDoc->NewIndirect<CPDF_Dictionary>();
   pFontDesc->SetNewFor<CPDF_Name>("Type", "FontDescriptor");
@@ -95,11 +94,11 @@
   pFontDesc->SetNewFor<CPDF_Number>("StemV", pFont->IsBold() ? 120 : 70);
 
   CPDF_Stream* pStream = pDoc->NewIndirect<CPDF_Stream>();
-  pStream->SetData({data, size});
+  pStream->SetData(span);
   // TODO(npm): Lengths for Type1 fonts.
   if (font_type == FPDF_FONT_TRUETYPE) {
     pStream->GetDict()->SetNewFor<CPDF_Number>("Length1",
-                                               static_cast<int>(size));
+                                               static_cast<int>(span.size()));
   }
   ByteString fontFile = font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2";
   pFontDesc->SetFor(fontFile, pStream->MakeReference(pDoc));
@@ -261,12 +260,9 @@
   return stream;
 }
 
-const uint32_t kMaxSimpleFontChar = 0xFF;
-
 CPDF_Font* LoadSimpleFont(CPDF_Document* pDoc,
                           std::unique_ptr<CFX_Font> pFont,
-                          const uint8_t* data,
-                          uint32_t size,
+                          pdfium::span<const uint8_t> span,
                           int font_type) {
   CPDF_Dictionary* fontDict = pDoc->NewIndirect<CPDF_Dictionary>();
   fontDict->SetNewFor<CPDF_Name>("Type", "Font");
@@ -279,6 +275,7 @@
 
   uint32_t glyphIndex;
   uint32_t currentChar = FXFT_Get_First_Char(pFont->GetFace(), &glyphIndex);
+  static constexpr uint32_t kMaxSimpleFontChar = 0xFF;
   if (currentChar > kMaxSimpleFontChar || glyphIndex == 0)
     return nullptr;
   fontDict->SetNewFor<CPDF_Number>("FirstChar", static_cast<int>(currentChar));
@@ -300,18 +297,15 @@
   fontDict->SetNewFor<CPDF_Number>("LastChar", static_cast<int>(currentChar));
   fontDict->SetFor("Widths", widthsArray->MakeReference(pDoc));
   CPDF_Dictionary* pFontDesc =
-      LoadFontDesc(pDoc, name, pFont.get(), data, size, font_type);
+      LoadFontDesc(pDoc, name, pFont.get(), span, font_type);
 
   fontDict->SetFor("FontDescriptor", pFontDesc->MakeReference(pDoc));
   return pDoc->LoadFont(fontDict);
 }
 
-const uint32_t kMaxUnicode = 0x10FFFF;
-
 CPDF_Font* LoadCompositeFont(CPDF_Document* pDoc,
                              std::unique_ptr<CFX_Font> pFont,
-                             const uint8_t* data,
-                             uint32_t size,
+                             pdfium::span<const uint8_t> span,
                              int font_type) {
   CPDF_Dictionary* fontDict = pDoc->NewIndirect<CPDF_Dictionary>();
   fontDict->SetNewFor<CPDF_Name>("Type", "Font");
@@ -341,11 +335,12 @@
   pCIDFont->SetFor("CIDSystemInfo", pCIDSystemInfo->MakeReference(pDoc));
 
   CPDF_Dictionary* pFontDesc =
-      LoadFontDesc(pDoc, name, pFont.get(), data, size, font_type);
+      LoadFontDesc(pDoc, name, pFont.get(), span, font_type);
   pCIDFont->SetFor("FontDescriptor", pFontDesc->MakeReference(pDoc));
 
   uint32_t glyphIndex;
   uint32_t currentChar = FXFT_Get_First_Char(pFont->GetFace(), &glyphIndex);
+  static constexpr uint32_t kMaxUnicode = 0x10FFFF;
   // If it doesn't have a single char, just fail
   if (glyphIndex == 0 || currentChar > kMaxUnicode)
     return nullptr;
@@ -478,17 +473,18 @@
     return nullptr;
   }
 
+  auto span = pdfium::make_span(data, size);
   auto pFont = pdfium::MakeUnique<CFX_Font>();
 
   // TODO(npm): Maybe use FT_Get_X11_Font_Format to check format? Otherwise, we
   // are allowing giving any font that can be loaded on freetype and setting it
   // as any font type.
-  if (!pFont->LoadEmbedded({data, size}))
+  if (!pFont->LoadEmbedded(span))
     return nullptr;
 
   return FPDFFontFromCPDFFont(
-      cid ? LoadCompositeFont(pDoc, std::move(pFont), data, size, font_type)
-          : LoadSimpleFont(pDoc, std::move(pFont), data, size, font_type));
+      cid ? LoadCompositeFont(pDoc, std::move(pFont), span, font_type)
+          : LoadSimpleFont(pDoc, std::move(pFont), span, font_type));
 }
 
 FPDF_EXPORT FPDF_FONT FPDF_CALLCONV
@@ -604,8 +600,5 @@
 
 FPDF_EXPORT int FPDF_CALLCONV FPDFText_GetTextRenderMode(FPDF_PAGEOBJECT text) {
   CPDF_TextObject* pTextObj = CPDFTextObjectFromFPDFPageObject(text);
-  if (!pTextObj)
-    return -1;
-
-  return static_cast<int>(pTextObj->m_TextState.GetTextMode());
+  return pTextObj ? static_cast<int>(pTextObj->m_TextState.GetTextMode()) : -1;
 }