diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index d0aac08..d107ed0 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -38,19 +38,20 @@
 }
 
 void CPDF_TrueTypeFont::LoadGlyphMap() {
-  if (!m_Font.GetFaceRec())
+  FXFT_FaceRec* face = m_Font.GetFaceRec();
+  if (!face)
     return;
 
   int baseEncoding = m_BaseEncoding;
-  if (m_pFontFile && m_Font.GetFaceRec()->num_charmaps > 0 &&
+  if (m_pFontFile && face->num_charmaps > 0 &&
       (baseEncoding == PDFFONT_ENCODING_MACROMAN ||
        baseEncoding == PDFFONT_ENCODING_WINANSI) &&
       FontStyleIsSymbolic(m_Flags)) {
     bool bSupportWin = false;
     bool bSupportMac = false;
-    for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.GetFaceRec()); i++) {
-      int platform_id = FXFT_Get_Charmap_PlatformID(
-          FXFT_Get_Face_Charmaps(m_Font.GetFaceRec())[i]);
+    for (int i = 0; i < FXFT_Get_Face_CharmapCount(face); i++) {
+      int platform_id =
+          FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(face)[i]);
       if (platform_id == 0 || platform_id == 3) {
         bSupportWin = true;
       } else if (platform_id == 0 || platform_id == 1) {
@@ -69,9 +70,8 @@
         baseEncoding == PDFFONT_ENCODING_WINANSI) &&
        m_CharNames.empty()) ||
       FontStyleIsNonSymbolic(m_Flags)) {
-    if (!FXFT_Has_Glyph_Names(m_Font.GetFaceRec()) &&
-        (!m_Font.GetFaceRec()->num_charmaps ||
-         !m_Font.GetFaceRec()->charmaps)) {
+    if (!FXFT_Has_Glyph_Names(face) &&
+        (!face->num_charmaps || !face->charmaps)) {
       int nStartChar = m_pFontDict->GetIntegerFor("FirstChar");
       if (nStartChar < 0 || nStartChar > 255)
         return;
@@ -84,16 +84,16 @@
         m_GlyphIndex[charcode] = nGlyph;
       return;
     }
-    bool bMSUnicode = FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 1);
+    bool bMSUnicode = FT_UseTTCharmap(face, 3, 1);
     bool bMacRoman = false;
     bool bMSSymbol = false;
     if (!bMSUnicode) {
       if (FontStyleIsNonSymbolic(m_Flags)) {
-        bMacRoman = FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0);
-        bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0);
+        bMacRoman = FT_UseTTCharmap(face, 1, 0);
+        bMSSymbol = !bMacRoman && FT_UseTTCharmap(face, 3, 0);
       } else {
-        bMSSymbol = FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0);
-        bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0);
+        bMSSymbol = FT_UseTTCharmap(face, 3, 0);
+        bMacRoman = !bMSSymbol && FT_UseTTCharmap(face, 1, 0);
       }
     }
     bool bToUnicode = m_pFontDict->KeyExist("ToUnicode");
@@ -101,32 +101,29 @@
       const char* name = GetAdobeCharName(baseEncoding, m_CharNames, charcode);
       if (!name) {
         m_GlyphIndex[charcode] =
-            m_pFontFile ? FT_Get_Char_Index(m_Font.GetFaceRec(), charcode) : -1;
+            m_pFontFile ? FT_Get_Char_Index(face, charcode) : -1;
         continue;
       }
       m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
       if (bMSSymbol) {
         for (size_t j = 0; j < FX_ArraySize(kPrefix); j++) {
           uint16_t unicode = kPrefix[j] * 256 + charcode;
-          m_GlyphIndex[charcode] =
-              FT_Get_Char_Index(m_Font.GetFaceRec(), unicode);
+          m_GlyphIndex[charcode] = FT_Get_Char_Index(face, unicode);
           if (m_GlyphIndex[charcode])
             break;
         }
       } else if (m_Encoding.UnicodeFromCharCode(charcode)) {
         if (bMSUnicode) {
-          m_GlyphIndex[charcode] = FT_Get_Char_Index(
-              m_Font.GetFaceRec(), m_Encoding.UnicodeFromCharCode(charcode));
+          m_GlyphIndex[charcode] =
+              FT_Get_Char_Index(face, m_Encoding.UnicodeFromCharCode(charcode));
         } else if (bMacRoman) {
           uint32_t maccode =
               FT_CharCodeFromUnicode(FT_ENCODING_APPLE_ROMAN,
                                      m_Encoding.UnicodeFromCharCode(charcode));
           if (!maccode) {
-            m_GlyphIndex[charcode] =
-                FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
+            m_GlyphIndex[charcode] = FXFT_Get_Name_Index(face, name);
           } else {
-            m_GlyphIndex[charcode] =
-                FT_Get_Char_Index(m_Font.GetFaceRec(), maccode);
+            m_GlyphIndex[charcode] = FT_Get_Char_Index(face, maccode);
           }
         }
       }
@@ -135,29 +132,27 @@
         continue;
       }
       if (strcmp(name, ".notdef") == 0) {
-        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFaceRec(), 32);
+        m_GlyphIndex[charcode] = FT_Get_Char_Index(face, 32);
         continue;
       }
-      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
+      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(face, name);
       if (m_GlyphIndex[charcode] != 0 || !bToUnicode)
         continue;
 
       WideString wsUnicode = UnicodeFromCharCode(charcode);
       if (!wsUnicode.IsEmpty()) {
-        m_GlyphIndex[charcode] =
-            FT_Get_Char_Index(m_Font.GetFaceRec(), wsUnicode[0]);
+        m_GlyphIndex[charcode] = FT_Get_Char_Index(face, wsUnicode[0]);
         m_Encoding.SetUnicode(charcode, wsUnicode[0]);
       }
     }
     return;
   }
-  if (FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0)) {
+  if (FT_UseTTCharmap(face, 3, 0)) {
     bool bFound = false;
     for (int charcode = 0; charcode < 256; charcode++) {
       for (size_t j = 0; j < FX_ArraySize(kPrefix); j++) {
         uint16_t unicode = kPrefix[j] * 256 + charcode;
-        m_GlyphIndex[charcode] =
-            FT_Get_Char_Index(m_Font.GetFaceRec(), unicode);
+        m_GlyphIndex[charcode] = FT_Get_Char_Index(face, unicode);
         if (m_GlyphIndex[charcode]) {
           bFound = true;
           break;
@@ -172,7 +167,7 @@
           if (name)
             m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
         }
-      } else if (FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0)) {
+      } else if (FT_UseTTCharmap(face, 1, 0)) {
         for (int charcode = 0; charcode < 256; charcode++) {
           m_Encoding.SetUnicode(
               charcode,
@@ -182,10 +177,10 @@
       return;
     }
   }
-  if (FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0)) {
+  if (FT_UseTTCharmap(face, 1, 0)) {
     bool bFound = false;
     for (int charcode = 0; charcode < 256; charcode++) {
-      m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFaceRec(), charcode);
+      m_GlyphIndex[charcode] = FT_Get_Char_Index(face, charcode);
       m_Encoding.SetUnicode(
           charcode, FT_UnicodeFromCharCode(FT_ENCODING_APPLE_ROMAN, charcode));
       if (m_GlyphIndex[charcode]) {
@@ -195,7 +190,7 @@
     if (m_pFontFile || bFound)
       return;
   }
-  if (FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE) == 0) {
+  if (FXFT_Select_Charmap(face, FT_ENCODING_UNICODE) == 0) {
     bool bFound = false;
     const uint16_t* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
     for (uint32_t charcode = 0; charcode < 256; charcode++) {
@@ -208,8 +203,8 @@
         else if (pUnicodes)
           m_Encoding.SetUnicode(charcode, pUnicodes[charcode]);
       }
-      m_GlyphIndex[charcode] = FT_Get_Char_Index(
-          m_Font.GetFaceRec(), m_Encoding.UnicodeFromCharCode(charcode));
+      m_GlyphIndex[charcode] =
+          FT_Get_Char_Index(face, m_Encoding.UnicodeFromCharCode(charcode));
       if (m_GlyphIndex[charcode])
         bFound = true;
     }
