| Index: xfa/fgas/font/cfgas_fontmgr.cpp
|
| diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
|
| index 1849441a1681616691237ef978291d802997a60f..9d3954fb1ee106b54e4de2fafa6231f4362c82db 100644
|
| --- a/xfa/fgas/font/cfgas_fontmgr.cpp
|
| +++ b/xfa/fgas/font/cfgas_fontmgr.cpp
|
| @@ -575,14 +575,6 @@ CFGAS_FontMgr::CFGAS_FontMgr(CFX_FontSourceEnum_File* pFontEnum)
|
| 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 @@ CFX_RetainPtr<CFGAS_GEFont> CFGAS_FontMgr::GetFontByCodePage(
|
| 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 @@ CFX_RetainPtr<CFGAS_GEFont> CFGAS_FontMgr::GetFontByUnicode(
|
| 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;
|
|
|