From 9a0736803ae6749ec508e1c3ff5f04a483bbcb56 Mon Sep 17 00:00:00 2001 From: weili Date: Thu, 8 Sep 2016 15:21:23 -0700 Subject: Reland of Fix leaked internal font Reland of Fix leaked internal font (patchset #2 id:60001 of https://codereview.chromium.org/2297303004/ ) In CFGAS_FontMgrImp::LoadFont(), a new internal font is created which is never released. It needs to be correctly marked as internal font to be released. Fix this by adding a new method to take the ownership of the font and mark it as internal font properly. The previous revert was caused by memory management errors which were fixed at https://codereview.chromium.org/2322043002/ BUG=pdfium:242 Review-Url: https://codereview.chromium.org/2320213002 --- xfa/fgas/font/fgas_gefont.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'xfa/fgas/font/fgas_gefont.h') diff --git a/xfa/fgas/font/fgas_gefont.h b/xfa/fgas/font/fgas_gefont.h index d139d445f4..824f931d76 100644 --- a/xfa/fgas/font/fgas_gefont.h +++ b/xfa/fgas/font/fgas_gefont.h @@ -24,7 +24,10 @@ class CFGAS_GEFont { uint32_t dwFontStyles, uint16_t wCodePage, IFGAS_FontMgr* pFontMgr); - static CFGAS_GEFont* LoadFont(CFX_Font* pExtFont, IFGAS_FontMgr* pFontMgr); + static CFGAS_GEFont* LoadFont(CFX_Font* pExternalFont, + IFGAS_FontMgr* pFontMgr); + static CFGAS_GEFont* LoadFont(std::unique_ptr pInternalFont, + IFGAS_FontMgr* pFontMgr); #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ static CFGAS_GEFont* LoadFont(const uint8_t* pBuffer, int32_t iLength, @@ -74,7 +77,8 @@ class CFGAS_GEFont { FX_BOOL LoadFontInternal(const uint8_t* pBuffer, int32_t length); FX_BOOL LoadFontInternal(IFX_Stream* pFontStream, FX_BOOL bSaveStream); #endif - FX_BOOL LoadFontInternal(CFX_Font* pExtFont); + FX_BOOL LoadFontInternal(CFX_Font* pExternalFont); + FX_BOOL LoadFontInternal(std::unique_ptr pInternalFont); FX_BOOL InitFont(); FX_BOOL GetCharBBoxInternal(FX_WCHAR wUnicode, CFX_Rect& bbox, @@ -97,7 +101,7 @@ class CFGAS_GEFont { CFGAS_GEFont* const m_pSrcFont; IFGAS_FontMgr* const m_pFontMgr; int32_t m_iRefCount; - FX_BOOL m_bExtFont; + bool m_bExternalFont; std::unique_ptr> m_pStream; std::unique_ptr> m_pFileRead; std::unique_ptr m_pFontEncoding; -- cgit v1.2.3