diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 1849441..9d3954f 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -575,14 +575,6 @@
 CFGAS_FontMgr::~CFGAS_FontMgr() {
   for (int32_t i = 0; i < m_InstalledFonts.GetSize(); i++)
     delete m_InstalledFonts[i];
-  FX_POSITION pos = m_Hash2CandidateList.GetStartPosition();
-  while (pos) {
-    uint32_t dwHash;
-    CFX_FontDescriptorInfos* pDescs;
-    m_Hash2CandidateList.GetNextAssoc(pos, dwHash, pDescs);
-    delete pDescs;
-  }
-  m_Hash2Fonts.clear();
 }
 
 bool CFGAS_FontMgr::EnumFontsFromFontMapper() {
@@ -645,12 +637,13 @@
   if (!pFontArray->empty())
     return (*pFontArray)[0];
 
-  CFX_FontDescriptorInfos* sortedFonts = nullptr;
-  if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) {
-    sortedFonts = new CFX_FontDescriptorInfos;
+  CFX_FontDescriptorInfos* sortedFonts = m_Hash2CandidateList[dwHash].get();
+  if (!sortedFonts) {
+    auto pNewFonts = pdfium::MakeUnique<CFX_FontDescriptorInfos>();
+    sortedFonts = pNewFonts.get();
     MatchFonts(*sortedFonts, wCodePage, dwFontStyles,
                CFX_WideString(pszFontFamily), 0);
-    m_Hash2CandidateList.SetAt(dwHash, sortedFonts);
+    m_Hash2CandidateList[dwHash] = std::move(pNewFonts);
   }
   if (sortedFonts->GetSize() == 0)
     return nullptr;
@@ -688,12 +681,13 @@
     if (VerifyUnicode((*pFonts)[i], wUnicode))
       return (*pFonts)[i];
   }
-  CFX_FontDescriptorInfos* sortedFonts = nullptr;
-  if (!m_Hash2CandidateList.Lookup(dwHash, sortedFonts)) {
-    sortedFonts = new CFX_FontDescriptorInfos;
+  CFX_FontDescriptorInfos* sortedFonts = m_Hash2CandidateList[dwHash].get();
+  if (!sortedFonts) {
+    auto pNewFonts = pdfium::MakeUnique<CFX_FontDescriptorInfos>();
+    sortedFonts = pNewFonts.get();
     MatchFonts(*sortedFonts, wCodePage, dwFontStyles,
                CFX_WideString(pszFontFamily), wUnicode);
-    m_Hash2CandidateList.SetAt(dwHash, sortedFonts);
+    m_Hash2CandidateList[dwHash] = std::move(pNewFonts);
   }
   for (int32_t i = 0; i < sortedFonts->GetSize(); ++i) {
     CFX_FontDescriptor* pDesc = sortedFonts->GetAt(i).pFont;
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index c4030e7..20efa32 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -249,7 +249,8 @@
       const CFX_ByteString& bsFaceName);
 
   CFX_FontDescriptors m_InstalledFonts;
-  CFX_MapPtrTemplate<uint32_t, CFX_FontDescriptorInfos*> m_Hash2CandidateList;
+  std::map<uint32_t, std::unique_ptr<CFX_FontDescriptorInfos>>
+      m_Hash2CandidateList;
   std::map<uint32_t, std::vector<CFX_RetainPtr<CFGAS_GEFont>>> m_Hash2Fonts;
   std::map<CFX_RetainPtr<CFGAS_GEFont>, CFX_RetainPtr<IFX_SeekableReadStream>>
       m_IFXFont2FileRead;
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index fc202f6..49639c2 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -214,6 +214,7 @@
 bool CFGAS_GEFont::InitFont() {
   if (!m_pFont)
     return false;
+
   if (!m_pFontEncoding) {
     m_pFontEncoding.reset(FX_CreateFontEncodingEx(m_pFont));
     if (!m_pFontEncoding)
@@ -225,9 +226,6 @@
   }
   if (!m_pRectArray)
     m_pRectArray = pdfium::MakeUnique<CFX_MassArrayTemplate<CFX_Rect>>(16);
-  if (!m_pBBoxMap)
-    m_pBBoxMap = pdfium::MakeUnique<CFX_MapPtrToPtr>(16);
-
   return true;
 }
 
@@ -312,19 +310,19 @@
 }
 
 bool CFGAS_GEFont::GetCharBBox(FX_WCHAR wUnicode,
-                               CFX_Rect& bbox,
+                               CFX_Rect* bbox,
                                bool bCharCode) {
   return GetCharBBoxInternal(wUnicode, bbox, true, bCharCode);
 }
 
 bool CFGAS_GEFont::GetCharBBoxInternal(FX_WCHAR wUnicode,
-                                       CFX_Rect& bbox,
+                                       CFX_Rect* bbox,
                                        bool bRecursive,
                                        bool bCharCode) {
   ASSERT(m_pRectArray);
-  ASSERT(m_pBBoxMap);
-  void* pRect = nullptr;
-  if (!m_pBBoxMap->Lookup((void*)(uintptr_t)wUnicode, pRect)) {
+  CFX_Rect* pRect = nullptr;
+  auto it = m_BBoxMap.find(wUnicode);
+  if (it == m_BBoxMap.end()) {
     CFX_RetainPtr<CFGAS_GEFont> pFont;
     int32_t iGlyph = GetGlyphIndex(wUnicode, true, &pFont, bCharCode);
     if (iGlyph != 0xFFFF && pFont) {
@@ -335,28 +333,31 @@
           rt.Set(rtBBox.left, rtBBox.top, rtBBox.Width(), rtBBox.Height());
           int32_t index = m_pRectArray->Add(rt);
           pRect = m_pRectArray->GetPtrAt(index);
-          m_pBBoxMap->SetAt((void*)(uintptr_t)wUnicode, pRect);
+          m_BBoxMap[wUnicode] = pRect;
         }
       } else if (pFont->GetCharBBoxInternal(wUnicode, bbox, false, bCharCode)) {
         return true;
       }
     }
+  } else {
+    pRect = it->second;
   }
   if (!pRect)
     return false;
 
-  bbox = *static_cast<const CFX_Rect*>(pRect);
+  *bbox = *pRect;
   return true;
 }
 
-bool CFGAS_GEFont::GetBBox(CFX_Rect& bbox) {
+bool CFGAS_GEFont::GetBBox(CFX_Rect* bbox) {
   FX_RECT rt(0, 0, 0, 0);
   if (!m_pFont->GetBBox(rt))
     return false;
-  bbox.left = rt.left;
-  bbox.width = rt.Width();
-  bbox.top = rt.bottom;
-  bbox.height = -rt.Height();
+
+  bbox->left = rt.left;
+  bbox->width = rt.Width();
+  bbox->top = rt.bottom;
+  bbox->height = -rt.Height();
   return true;
 }
 
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h
index 962b93f..de4f963 100644
--- a/xfa/fgas/font/cfgas_gefont.h
+++ b/xfa/fgas/font/cfgas_gefont.h
@@ -55,8 +55,8 @@
   int32_t GetGlyphIndex(FX_WCHAR wUnicode, bool bCharCode = false);
   int32_t GetAscent() const;
   int32_t GetDescent() const;
-  bool GetCharBBox(FX_WCHAR wUnicode, CFX_Rect& bbox, bool bCharCode = false);
-  bool GetBBox(CFX_Rect& bbox);
+  bool GetCharBBox(FX_WCHAR wUnicode, CFX_Rect* bbox, bool bCharCode = false);
+  bool GetBBox(CFX_Rect* bbox);
   CFX_RetainPtr<CFGAS_GEFont> GetSubstFont(int32_t iGlyphIndex) const;
   CFX_Font* GetDevFont() const { return m_pFont; }
   void SetFontProvider(CXFA_PDFFontMgr* pProvider) { m_pProvider = pProvider; }
@@ -83,7 +83,7 @@
   bool LoadFontInternal(std::unique_ptr<CFX_Font> pInternalFont);
   bool InitFont();
   bool GetCharBBoxInternal(FX_WCHAR wUnicode,
-                           CFX_Rect& bbox,
+                           CFX_Rect* bbox,
                            bool bRecursive,
                            bool bCharCode = false);
   bool GetCharWidthInternal(FX_WCHAR wUnicode,
@@ -109,7 +109,7 @@
   std::unique_ptr<CFX_UnicodeEncoding> m_pFontEncoding;
   std::unique_ptr<CFX_DiscreteArrayTemplate<uint16_t>> m_pCharWidthMap;
   std::unique_ptr<CFX_MassArrayTemplate<CFX_Rect>> m_pRectArray;
-  std::unique_ptr<CFX_MapPtrToPtr> m_pBBoxMap;
+  std::map<FX_WCHAR, CFX_Rect*> m_BBoxMap;  // Rect owned by m_pRectArray.
   CXFA_PDFFontMgr* m_pProvider;  // not owned.
   std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_SubstFonts;
   std::map<FX_WCHAR, CFX_RetainPtr<CFGAS_GEFont>> m_FontMapper;
diff --git a/xfa/fgas/layout/fgas_rtfbreak.cpp b/xfa/fgas/layout/fgas_rtfbreak.cpp
index cacb77f..f7ba0e7 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.cpp
+++ b/xfa/fgas/layout/fgas_rtfbreak.cpp
@@ -1319,7 +1319,7 @@
           if (!bAdjusted && bVerticalChar && (dwProps & 0x00010000) != 0) {
             CFX_Rect rtBBox;
             rtBBox.Reset();
-            if (pFont->GetCharBBox(wForm, rtBBox, bMBCSCode)) {
+            if (pFont->GetCharBBox(wForm, &rtBBox, bMBCSCode)) {
               ptOffset.x = fFontSize * (850 - rtBBox.right()) / 1000.0f;
               ptOffset.y = fFontSize * (1000 - rtBBox.height) / 2000.0f;
             }
@@ -1436,7 +1436,7 @@
   CFX_Rect bbox;
   bbox.Set(0, 0, 0, 0);
   if (bCharBBox)
-    bCharBBox = pFont->GetBBox(bbox);
+    bCharBBox = pFont->GetBBox(&bbox);
 
   FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale);
   FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale);
diff --git a/xfa/fgas/layout/fgas_textbreak.cpp b/xfa/fgas/layout/fgas_textbreak.cpp
index a9d35a3..35984f5 100644
--- a/xfa/fgas/layout/fgas_textbreak.cpp
+++ b/xfa/fgas/layout/fgas_textbreak.cpp
@@ -1468,7 +1468,7 @@
         if (chartype == FX_CHARTYPE_Combination) {
           CFX_Rect rtBBox;
           rtBBox.Reset();
-          if (pFont->GetCharBBox(wForm, rtBBox, false)) {
+          if (pFont->GetCharBBox(wForm, &rtBBox, false)) {
             pCharPos->m_OriginY =
                 fYBase + fFontSize -
                 fFontSize * (FX_FLOAT)rtBBox.height / (FX_FLOAT)iMaxHeight;
@@ -1479,7 +1479,7 @@
                 FX_CHARTYPE_Combination) {
               CFX_Rect rtBox;
               rtBox.Reset();
-              if (pFont->GetCharBBox(wLast, rtBox, false)) {
+              if (pFont->GetCharBBox(wLast, &rtBox, false)) {
                 pCharPos->m_OriginY -= fFontSize * rtBox.height / iMaxHeight;
               }
             }
@@ -1494,7 +1494,7 @@
         if (!bAdjusted && bVerticalChar && (dwProps & 0x00010000) != 0) {
           CFX_Rect rtBBox;
           rtBBox.Reset();
-          if (pFont->GetCharBBox(wForm, rtBBox, false)) {
+          if (pFont->GetCharBBox(wForm, &rtBBox, false)) {
             ptOffset.x = fFontSize * (850 - rtBBox.right()) / iMaxHeight;
             ptOffset.y = fFontSize * (iAscent - rtBBox.top - 150) / iMaxHeight;
           }
@@ -1610,7 +1610,7 @@
   CFX_Rect bbox;
   bbox.Set(0, 0, 0, 0);
   if (bCharBBox)
-    bCharBBox = pFont->GetBBox(bbox);
+    bCharBBox = pFont->GetBBox(&bbox);
 
   FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale);
   FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale);
