Build font off of cached copy of data in CFX_FontMapper.
Otherwise, it is a duplicate copy that we will not preserve past
the end of the function. A follow-up task is to avoid the duplicate
copy in the first place.
Bug: chromium:976231
Change-Id: I589c68b9ab277aeb3b4ca5aefd64f170c347cc4d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56470
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index e473c4f..828f0dc 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -154,12 +154,6 @@
std::unique_ptr<uint8_t, FxFreeDeleter> pData,
uint32_t size,
uint32_t font_offset) {
- int face_index = GetTTCIndex(pData.get(), ttc_size, font_offset);
- RetainPtr<CFX_Face> face =
- GetFixedFace({pData.get(), static_cast<size_t>(ttc_size)}, face_index);
- if (!face)
- return nullptr;
-
CTTFontDesc* pFontDesc = nullptr;
ByteString keyname = KeyNameFromSize(ttc_size, checksum);
auto it = m_FaceMap.find(keyname);
@@ -171,6 +165,13 @@
pFontDesc = pNewDesc.get();
m_FaceMap[keyname] = std::move(pNewDesc);
}
+
+ int face_index = GetTTCIndex(pFontDesc->FontData(), ttc_size, font_offset);
+ RetainPtr<CFX_Face> face = GetFixedFace(
+ {pFontDesc->FontData(), static_cast<size_t>(ttc_size)}, face_index);
+ if (!face)
+ return nullptr;
+
pFontDesc->SetFace(face_index, face.Get());
return face;
}