Index: core/fxge/ge/cfx_font.cpp |
diff --git a/core/fxge/ge/cfx_font.cpp b/core/fxge/ge/cfx_font.cpp |
index b85709040b141071957aa99762a7ec5ec7e30b02..7be300ff660f6da392e273263174296953dc1a5a 100644 |
--- a/core/fxge/ge/cfx_font.cpp |
+++ b/core/fxge/ge/cfx_font.cpp |
@@ -47,21 +47,27 @@ unsigned long FTStreamRead(FXFT_Stream stream, |
IFX_SeekableReadStream* pFile = |
static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer); |
- return pFile->ReadBlock(buffer, offset, count) ? count : 0; |
+ if (!pFile) |
+ return 0; |
+ |
+ if (!pFile->ReadBlock(buffer, offset, count)) |
+ return 0; |
+ |
+ return count; |
} |
void FTStreamClose(FXFT_Stream stream) {} |
bool LoadFileImp(FXFT_Library library, |
FXFT_Face* Face, |
- IFX_SeekableReadStream* pFile, |
+ const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, |
int32_t faceIndex, |
std::unique_ptr<FXFT_StreamRec>* stream) { |
- std::unique_ptr<FXFT_StreamRec> stream1(new FXFT_StreamRec()); |
+ auto stream1 = pdfium::MakeUnique<FXFT_StreamRec>(); |
stream1->base = nullptr; |
stream1->size = static_cast<unsigned long>(pFile->GetSize()); |
stream1->pos = 0; |
- stream1->descriptor.pointer = pFile; |
+ stream1->descriptor.pointer = static_cast<void*>(pFile.Get()); |
stream1->close = FTStreamClose; |
stream1->read = FTStreamRead; |
FXFT_Open_Args args; |
@@ -338,15 +344,15 @@ void CFX_Font::LoadSubst(const CFX_ByteString& face_name, |
} |
#ifdef PDF_ENABLE_XFA |
-bool CFX_Font::LoadFile(IFX_SeekableReadStream* pFile, |
+bool CFX_Font::LoadFile(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, |
int nFaceIndex, |
int* pFaceCount) { |
m_bEmbedded = false; |
CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); |
pFontMgr->InitFTLibrary(); |
- FXFT_Library library = pFontMgr->GetFTLibrary(); |
+ FXFT_Library library = pFontMgr->GetFTLibrary(); |
std::unique_ptr<FXFT_StreamRec> stream; |
if (!LoadFileImp(library, &m_Face, pFile, nFaceIndex, &stream)) |
return false; |