Remove trailing whitespaces in core.
[pdfium.git] / core / src / fxge / ge / fx_ge_fontmap.cpp
index 079c485..8406b3c 100644 (file)
@@ -1,9 +1,11 @@
 // Copyright 2014 PDFium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
+
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
+#include <limits>
+
 #include "../../../include/fxge/fx_ge.h"
 #include "../../../include/fxge/fx_freetype.h"
 #include "text_int.h"
@@ -61,14 +63,11 @@ FX_BOOL CTTFontDesc::ReleaseFace(FXFT_Face face)
 }
 CFX_FontMgr::CFX_FontMgr()
 {
-    m_pBuiltinMapper = FX_NEW CFX_FontMapper;
-    if (!m_pBuiltinMapper) {
-        return;
-    }
+    m_pBuiltinMapper = new CFX_FontMapper;
     m_pBuiltinMapper->m_pFontMgr = this;
     m_pExtMapper = NULL;
     m_FTLibrary = NULL;
-    FXSYS_memset32(m_ExternalFonts, 0, sizeof m_ExternalFonts);
+    FXSYS_memset(m_ExternalFonts, 0, sizeof m_ExternalFonts);
 }
 CFX_FontMgr::~CFX_FontMgr()
 {
@@ -118,7 +117,7 @@ FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bT
                                            CharsetCP, pSubstFont);
 }
 FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name,
-                                     int weight, FX_BOOL bItalic, FX_LPBYTE& pFontData)
+                                     int weight, FX_BOOL bItalic, uint8_t*& pFontData)
 {
     CFX_ByteString key(face_name);
     key += ',';
@@ -134,12 +133,9 @@ FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name,
     return NULL;
 }
 FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
-                                     int weight, FX_BOOL bItalic, FX_LPBYTE pData, FX_DWORD size, int face_index)
+                                     int weight, FX_BOOL bItalic, uint8_t* pData, FX_DWORD size, int face_index)
 {
-    CTTFontDesc* pFontDesc = FX_NEW CTTFontDesc;
-    if (!pFontDesc) {
-        return NULL;
-    }
+    CTTFontDesc* pFontDesc = new CTTFontDesc;
     pFontDesc->m_Type = 1;
     pFontDesc->m_SingleFace.m_pFace = NULL;
     pFontDesc->m_SingleFace.m_bBold = weight;
@@ -168,7 +164,7 @@ FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
     m_FaceMap.SetAt(key, pFontDesc);
     return pFontDesc->m_SingleFace.m_pFace;
 }
-const FX_LPCSTR g_Base14FontNames[14] = {
+const FX_CHAR* const g_Base14FontNames[14] = {
     "Courier",
     "Courier-Bold",
     "Courier-BoldOblique",
@@ -282,7 +278,7 @@ g_AltFontNames[] = {
 extern "C" {
     static int compareString(const void* key, const void* element)
     {
-        return FXSYS_stricmp((FX_LPCSTR)key, ((_AltFontName*)element)->m_pName);
+        return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontName*)element)->m_pName);
     }
 }
 int _PDF_GetStandardFontName(CFX_ByteString& name)
@@ -295,10 +291,10 @@ int _PDF_GetStandardFontName(CFX_ByteString& name)
     name = g_Base14FontNames[found->m_Index];
     return found->m_Index;
 }
-int GetTTCIndex(FX_LPCBYTE pFontData, FX_DWORD ttc_size, FX_DWORD font_offset)
+int GetTTCIndex(const uint8_t* pFontData, FX_DWORD ttc_size, FX_DWORD font_offset)
 {
     int face_index = 0;
-    FX_LPCBYTE p = pFontData + 8;
+    const uint8_t* p = pFontData + 8;
     FX_DWORD nfont = GET_TT_LONG(p);
     FX_DWORD index;
     for (index = 0; index < nfont; index ++) {
@@ -315,7 +311,7 @@ int GetTTCIndex(FX_LPCBYTE pFontData, FX_DWORD ttc_size, FX_DWORD font_offset)
     return face_index;
 }
 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
-                                        int font_offset, FX_LPBYTE& pFontData)
+                                        int font_offset, uint8_t*& pFontData)
 {
     CFX_ByteString key;
     key.Format("%d:%d", ttc_size, checksum);
@@ -333,14 +329,11 @@ FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
     return pFontDesc->m_TTCFace.m_pFaces[face_index];
 }
 FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
-                                        FX_LPBYTE pData, FX_DWORD size, int font_offset)
+                                        uint8_t* pData, FX_DWORD size, int font_offset)
 {
     CFX_ByteString key;
     key.Format("%d:%d", ttc_size, checksum);
-    CTTFontDesc* pFontDesc = FX_NEW CTTFontDesc;
-    if (!pFontDesc) {
-        return NULL;
-    }
+    CTTFontDesc* pFontDesc = new CTTFontDesc;
     pFontDesc->m_Type = 2;
     pFontDesc->m_pFontData = pData;
     for (int i = 0; i < 16; i ++) {
@@ -353,7 +346,7 @@ FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
     pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
     return pFontDesc->m_TTCFace.m_pFaces[face_index];
 }
-FXFT_Face CFX_FontMgr::GetFixedFace(FX_LPCBYTE pData, FX_DWORD size, int face_index)
+FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index)
 {
     FXFT_Library library;
     if (m_FTLibrary == NULL) {
@@ -371,7 +364,7 @@ FXFT_Face CFX_FontMgr::GetFixedFace(FX_LPCBYTE pData, FX_DWORD size, int face_in
     }
     return face;
 }
-FXFT_Face CFX_FontMgr::GetFileFace(FX_LPCSTR filename, int face_index)
+FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index)
 {
     FXFT_Library library;
     if (m_FTLibrary == NULL) {
@@ -438,11 +431,11 @@ const FoxitFonts g_FoxitFonts[14] = {
     {g_FoxitSymbolFontData, 16729},
     {g_FoxitDingbatsFontData, 29513},
 };
-void _FPDFAPI_GetInternalFontData(int id, FX_LPCBYTE& data, FX_DWORD& size)
+void _FPDFAPI_GetInternalFontData(int id, const uint8_t*& data, FX_DWORD& size)
 {
     CFX_GEModule::Get()->GetFontMgr()->GetStandardFont(data, size, id);
 }
-FX_BOOL CFX_FontMgr::GetStandardFont(FX_LPCBYTE& pFontData, FX_DWORD& size, int index)
+FX_BOOL CFX_FontMgr::GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index)
 {
     if (index > 15 || index < 0) {
         return FALSE;
@@ -465,7 +458,7 @@ FX_BOOL CFX_FontMgr::GetStandardFont(FX_LPCBYTE& pFontData, FX_DWORD& size, int
 }
 CFX_FontMapper::CFX_FontMapper()
 {
-    FXSYS_memset32(m_FoxitFaces, 0, sizeof m_FoxitFaces);
+    FXSYS_memset(m_FoxitFaces, 0, sizeof m_FoxitFaces);
     m_MMFaces[0] = m_MMFaces[1] = NULL;
     m_pFontInfo = NULL;
     m_bListLoaded = FALSE;
@@ -497,7 +490,7 @@ void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo)
     }
     m_pFontInfo = pFontInfo;
 }
-static CFX_ByteString _TT_NormalizeName(FX_LPCSTR family)
+static CFX_ByteString _TT_NormalizeName(const FX_CHAR* family)
 {
     CFX_ByteString norm(family, -1);
     norm.Remove(' ');
@@ -510,12 +503,12 @@ static CFX_ByteString _TT_NormalizeName(FX_LPCSTR family)
     norm.MakeLower();
     return norm;
 }
-CFX_ByteString _FPDF_GetNameFromTT(FX_LPCBYTE name_table, FX_DWORD name_id)
+CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD name_id)
 {
-    FX_LPCBYTE ptr = name_table + 2;
+    const uint8_t* ptr = name_table + 2;
     int name_count = GET_TT_SHORT(ptr);
     int string_offset = GET_TT_SHORT(ptr + 2);
-    FX_LPCBYTE string_ptr = name_table + string_offset;
+    const uint8_t* string_ptr = name_table + string_offset;
     ptr += 4;
     for (int i = 0; i < name_count; i ++) {
         if (GET_TT_SHORT(ptr + 6) == name_id && GET_TT_SHORT(ptr) == 1 && GET_TT_SHORT(ptr + 2) == 0) {
@@ -534,10 +527,10 @@ static CFX_ByteString _FPDF_ReadStringFromFile(FXSYS_FILE* pFile, FX_DWORD size)
     buffer.ReleaseBuffer(size);
     return buffer;
 }
-CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, FX_LPCBYTE pTables, FX_DWORD nTables, FX_DWORD tag)
+CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, const uint8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
 {
     for (FX_DWORD i = 0; i < nTables; i ++) {
-        FX_LPCBYTE p = pTables + i * 16;
+        const uint8_t* p = pTables + i * 16;
         if (GET_TT_LONG(p) == tag) {
             FX_DWORD offset = GET_TT_LONG(p + 8);
             FX_DWORD size = GET_TT_LONG(p + 12);
@@ -547,10 +540,10 @@ CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, FX_LPCBYTE pTables, FX_D
     }
     return CFX_ByteString();
 }
-CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile, FX_LPCBYTE pTables, FX_DWORD nTables, FX_DWORD tag)
+CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile, const uint8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
 {
     for (FX_DWORD i = 0; i < nTables; i ++) {
-        FX_LPCBYTE p = pTables + i * 16;
+        const uint8_t* p = pTables + i * 16;
         if (GET_TT_LONG(p) == tag) {
             FX_DWORD offset = GET_TT_LONG(p + 8);
             FX_DWORD size = GET_TT_LONG(p + 12);
@@ -572,10 +565,7 @@ CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont)
     CFX_ByteString result;
     FX_DWORD size = m_pFontInfo->GetFontData(hFont, 0x6e616d65, NULL, 0);
     if (size) {
-        FX_LPBYTE buffer = FX_Alloc(FX_BYTE, size);
-        if (!buffer) {
-            return result;
-        }
+        uint8_t* buffer = FX_Alloc(uint8_t, size);
         m_pFontInfo->GetFontData(hFont, 0x6e616d65, buffer, size);
         result = _FPDF_GetNameFromTT(buffer, 6);
         FX_Free(buffer);
@@ -594,7 +584,7 @@ void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset)
     if (name == m_LastFamily) {
         return;
     }
-    FX_LPCBYTE ptr = name;
+    const uint8_t* ptr = name;
     FX_BOOL bLocalized = FALSE;
     for (int i = 0; i < name.GetLength(); i ++)
         if (ptr[i] > 0x80) {
@@ -654,7 +644,7 @@ CFX_ByteString CFX_FontMapper::MatchInstalledFonts(const CFX_ByteString& norm_na
     return match;
 }
 typedef struct _CHARSET_MAP_ {
-    FX_BYTE charset;
+    uint8_t charset;
     FX_WORD codepage;
 } CHARSET_MAP;
 static const CHARSET_MAP g_Codepage2CharsetTable[] = {
@@ -690,11 +680,11 @@ static const CHARSET_MAP g_Codepage2CharsetTable[] = {
     { 88, 10029 },
     { 89, 10007 },
 };
-FX_BYTE _GetCharsetFromCodePage(FX_WORD codepage)
+uint8_t _GetCharsetFromCodePage(FX_WORD codepage)
 {
-    FX_INT32 iEnd = sizeof(g_Codepage2CharsetTable) / sizeof(CHARSET_MAP) - 1;
+    int32_t iEnd = sizeof(g_Codepage2CharsetTable) / sizeof(CHARSET_MAP) - 1;
     FXSYS_assert(iEnd >= 0);
-    FX_INT32 iStart = 0, iMid;
+    int32_t iStart = 0, iMid;
     do {
         iMid = (iStart + iEnd) / 2;
         const CHARSET_MAP & cp = g_Codepage2CharsetTable[iMid];
@@ -754,7 +744,7 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseF
         if (m_FoxitFaces[iBaseFont]) {
             return m_FoxitFaces[iBaseFont];
         }
-        FX_LPCBYTE pFontData = NULL;
+        const uint8_t* pFontData = NULL;
         FX_DWORD size = 0;
         if (m_pFontMgr->GetStandardFont(pFontData, size, iBaseFont)) {
             m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
@@ -772,7 +762,7 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseF
         if (m_MMFaces[1]) {
             return m_MMFaces[1];
         }
-        FX_LPCBYTE pFontData = NULL;
+        const uint8_t* pFontData = NULL;
         FX_DWORD size;
         m_pFontMgr->GetStandardFont(pFontData, size, 14);
         m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
@@ -782,15 +772,15 @@ FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseF
     if (m_MMFaces[0]) {
         return m_MMFaces[0];
     }
-    FX_LPCBYTE pFontData = NULL;
+    const uint8_t* pFontData = NULL;
     FX_DWORD size = 0;
     m_pFontMgr->GetStandardFont(pFontData, size, 15);
     m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
     return m_MMFaces[0];
 }
 const struct _AltFontFamily {
-    FX_LPCSTR m_pFontName;
-    FX_LPCSTR m_pFontFamily;
+    const FX_CHAR* m_pFontName;
+    const FX_CHAR* m_pFontFamily;
 }
 g_AltFontFamilies[] = {
     {"AGaramondPro", "Adobe Garamond Pro"},
@@ -800,11 +790,11 @@ g_AltFontFamilies[] = {
 extern "C" {
     static int compareFontFamilyString(const void* key, const void* element)
     {
-        CFX_ByteString str_key((FX_LPCSTR)key);
+        CFX_ByteString str_key((const FX_CHAR*)key);
         if (str_key.Find(((_AltFontFamily*)element)->m_pFontName) != -1) {
             return 0;
         }
-        return FXSYS_stricmp((FX_LPCSTR)key, ((_AltFontFamily*)element)->m_pFontName);
+        return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontFamily*)element)->m_pFontName);
     }
 }
 #define FX_FONT_STYLE_None             0x00
@@ -833,8 +823,8 @@ static CFX_ByteString _GetFontFamily(CFX_ByteString fontName, int nStyle)
     return found->m_pFontFamily;
 };
 typedef struct _FX_FontStyle {
-    FX_LPCSTR style;
-    FX_INT32 len;
+    const FX_CHAR* style;
+    int32_t len;
 } FX_FontStyle;
 const FX_FontStyle g_FontStyles[] = {
   { "Bold", 4 },
@@ -843,7 +833,7 @@ const FX_FontStyle g_FontStyles[] = {
   { "Reg", 3 },
   { "Regular", 7 },
 };
-CFX_ByteString ParseStyle(FX_LPCSTR pStyle, int iLen, int iIndex)
+CFX_ByteString ParseStyle(const FX_CHAR* pStyle, int iLen, int iIndex)
 {
     CFX_ByteTextBuf buf;
     if (!iLen || iLen <= iIndex) {
@@ -858,9 +848,9 @@ CFX_ByteString ParseStyle(FX_LPCSTR pStyle, int iLen, int iIndex)
     }
     return buf.GetByteString();
 }
-FX_INT32 GetStyleType(const CFX_ByteString &bsStyle, FX_BOOL bRevert)
+int32_t GetStyleType(const CFX_ByteString &bsStyle, FX_BOOL bRevert)
 {
-    FX_INT32 iLen = bsStyle.GetLength();
+    int32_t iLen = bsStyle.GetLength();
     if (!iLen) {
         return -1;
     }
@@ -913,7 +903,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
         if (m_FoxitFaces[12]) {
             return m_FoxitFaces[12];
         }
-        FX_LPCBYTE pFontData = NULL;
+        const uint8_t* pFontData = NULL;
         FX_DWORD size = 0;
         m_pFontMgr->GetStandardFont(pFontData, size, 12);
         m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
@@ -926,7 +916,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
         if (m_FoxitFaces[13]) {
             return m_FoxitFaces[13];
         }
-        FX_LPCBYTE pFontData = NULL;
+        const uint8_t* pFontData = NULL;
         FX_DWORD size = 0;
         m_pFontMgr->GetStandardFont(pFontData, size, 13);
         m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
@@ -978,7 +968,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
         }
         if (!bHasHypen) {
             int nLen = family.GetLength();
-            FX_INT32 nRet = GetStyleType(family, TRUE);
+            int32_t nRet = GetStyleType(family, TRUE);
             if (nRet > -1) {
                 family = family.Left(nLen - g_FontStyles[nRet].len);
                 if (nRet == 0) {
@@ -1004,13 +994,13 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
     }
     if (!style.IsEmpty()) {
         int nLen = style.GetLength();
-        FX_LPCSTR pStyle = style;
+        const FX_CHAR* pStyle = style;
         int i = 0;
         FX_BOOL bFirstItem = TRUE;
         CFX_ByteString buf;
         while (i < nLen) {
             buf = ParseStyle(pStyle, nLen, i);
-            FX_INT32 nRet = GetStyleType(buf, FALSE);
+            int32_t nRet = GetStyleType(buf, FALSE);
             if ((i && !bStyleAvail) || (!i && nRet < 0)) {
                 family = SubstName;
                 iBaseFont = 12;
@@ -1166,7 +1156,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
                     if (m_FoxitFaces[12]) {
                         return m_FoxitFaces[12];
                     }
-                    FX_LPCBYTE pFontData = NULL;
+                    const uint8_t* pFontData = NULL;
                     FX_DWORD size = 0;
                     m_pFontMgr->GetStandardFont(pFontData, size, 12);
                     m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
@@ -1208,31 +1198,25 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTru
     }
     FXFT_Face face = NULL;
     if (ttc_size) {
-        FX_BYTE temp[1024];
+        uint8_t temp[1024];
         m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024);
         FX_DWORD checksum = 0;
         for (int i = 0; i < 256; i ++) {
             checksum += ((FX_DWORD*)temp)[i];
         }
-        FX_LPBYTE pFontData;
+        uint8_t* pFontData;
         face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, ttc_size - font_size, pFontData);
         if (face == NULL) {
-            pFontData = FX_Alloc(FX_BYTE, ttc_size);
-            if (pFontData) {
-                m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size);
-                face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, ttc_size,
-                                                    ttc_size - font_size);
-            }
+            pFontData = FX_Alloc(uint8_t, ttc_size);
+            m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size);
+            face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, ttc_size,
+                                                ttc_size - font_size);
         }
     } else {
-        FX_LPBYTE pFontData;
+        uint8_t* pFontData;
         face = m_pFontMgr->GetCachedFace(SubstName, weight, bItalic, pFontData);
         if (face == NULL) {
-            pFontData = FX_Alloc(FX_BYTE, font_size);
-            if (!pFontData) {
-                m_pFontInfo->DeleteFont(hFont);
-                return NULL;
-            }
+            pFontData = FX_Alloc(uint8_t, font_size);
             m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size);
             face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontData, font_size, m_pFontInfo->GetFaceIndex(hFont));
         }
@@ -1309,12 +1293,12 @@ CFX_FolderFontInfo::~CFX_FolderFontInfo()
     FX_POSITION pos = m_FontList.GetStartPosition();
     while (pos) {
         CFX_ByteString key;
-        FX_LPVOID value;
+        void* value;
         m_FontList.GetNextAssoc(pos, key, value);
         delete (CFontFaceInfo*)value;
     }
 }
-void CFX_FolderFontInfo::AddPath(FX_BSTR path)
+void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path)
 {
     m_PathList.Add(path);
 }
@@ -1373,19 +1357,30 @@ void CFX_FolderFontInfo::ScanFile(CFX_ByteString& path)
     }
     FXSYS_fseek(pFile, 0, FXSYS_SEEK_END);
     FX_DWORD filesize = FXSYS_ftell(pFile);
-    FX_BYTE buffer[16];
+    uint8_t buffer[16];
     FXSYS_fseek(pFile, 0, FXSYS_SEEK_SET);
     size_t readCnt = FXSYS_fread(buffer, 12, 1, pFile);
+    if (readCnt != 1) {
+        FXSYS_fclose(pFile);
+        return;
+    }
+
     if (GET_TT_LONG(buffer) == 0x74746366) {
         FX_DWORD nFaces = GET_TT_LONG(buffer + 8);
-        FX_LPBYTE offsets = FX_Alloc(FX_BYTE, nFaces * 4);
-        if (!offsets) {
+        if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) {
+            FXSYS_fclose(pFile);
+            return;
+        }
+        FX_DWORD face_bytes = nFaces * 4;
+        uint8_t* offsets = FX_Alloc(uint8_t, face_bytes);
+        readCnt = FXSYS_fread(offsets, face_bytes, 1, pFile);
+        if (readCnt != face_bytes) {
+            FX_Free(offsets);
             FXSYS_fclose(pFile);
             return;
         }
-        readCnt = FXSYS_fread(offsets, nFaces * 4, 1, pFile);
         for (FX_DWORD i = 0; i < nFaces; i ++) {
-            FX_LPBYTE p = offsets + i * 4;
+            uint8_t* p = offsets + i * 4;
             ReportFace(path, pFile, filesize, GET_TT_LONG(p));
         }
         FX_Free(offsets);
@@ -1412,14 +1407,11 @@ void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_
     if (style != "Regular") {
         facename += " " + style;
     }
-    FX_LPVOID p;
+    void* p;
     if (m_FontList.Lookup(facename, p)) {
         return;
     }
-    CFontFaceInfo* pInfo = FX_NEW CFontFaceInfo;
-    if (!pInfo) {
-        return;
-    }
+    CFontFaceInfo* pInfo = new CFontFaceInfo;
     pInfo->m_FilePath = path;
     pInfo->m_FaceName = facename;
     pInfo->m_FontTables = tables;
@@ -1428,7 +1420,7 @@ void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_
     pInfo->m_Charsets = 0;
     CFX_ByteString os2 = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32);
     if (os2.GetLength() >= 86) {
-        FX_LPCBYTE p = (FX_LPCBYTE)os2 + 78;
+        const uint8_t* p = (const uint8_t*)os2 + 78;
         FX_DWORD codepages = GET_TT_LONG(p);
         if (codepages & (1 << 17)) {
             m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET);
@@ -1465,19 +1457,19 @@ void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_
     }
     m_FontList.SetAt(facename, pInfo);
 }
-void* CFX_FolderFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR family, FX_BOOL& bExact)
+void* CFX_FolderFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, FX_BOOL& bExact)
 {
     return NULL;
 }
-void* CFX_FolderFontInfo::GetFont(FX_LPCSTR face)
+void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face)
 {
-    FX_LPVOID p;
+    void* p;
     if (!m_FontList.Lookup(face, p)) {
         return NULL;
     }
     return p;
 }
-FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size)
+FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size)
 {
     if (hFont == NULL) {
         return 0;
@@ -1501,7 +1493,7 @@ FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE
     } else {
         FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16;
         for (FX_DWORD i = 0; i < nTables; i ++) {
-            FX_LPCBYTE p = (FX_LPCBYTE)pFont->m_FontTables + i * 16;
+            const uint8_t* p = (const uint8_t*)pFont->m_FontTables + i * 16;
             if (GET_TT_LONG(p) == table) {
                 offset = GET_TT_LONG(p + 8);
                 datasize = GET_TT_LONG(p + 12);