Fix heap use after free in FT_Stream_ReleaseFrame
authorJUN FANG <jun_fang@foxitsoftware.com>
Thu, 16 Apr 2015 22:19:04 +0000 (15:19 -0700)
committerJUN FANG <jun_fang@foxitsoftware.com>
Thu, 16 Apr 2015 22:19:04 +0000 (15:19 -0700)
Adjust the release order of resource to fix this issue.

BUG=452793
R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/1082023002

core/src/fxge/ge/fx_ge_font.cpp
core/src/fxge/ge/fx_ge_fontmap.cpp
fpdfsdk/src/fpdfview.cpp
xfa/src/fgas/src/localization/fx_datetime.cpp
xfa/src/fwl/src/core/fwl_noteimp.cpp
xfa/src/fwl/src/core/fwl_widgetmgrimp.cpp

index aeaebe8..57580f4 100644 (file)
@@ -25,42 +25,42 @@ CFX_Font::CFX_Font()
     m_pDwFont = NULL;
     m_hHandle = NULL;
     m_bDwLoaded = FALSE;
-    m_bLogic = FALSE;\r
-}\r
-FX_BOOL CFX_Font::LoadClone(const CFX_Font* pFont)\r
-{\r
-    if (pFont == NULL) {\r
-        return FALSE;\r
-    }\r
-    m_bLogic = TRUE;\r
-    if (pFont->m_pSubstFont) {\r
-        m_pSubstFont = FX_NEW CFX_SubstFont;\r
-        if (!m_pSubstFont) {\r
-            return FALSE;\r
-        }\r
-        m_pSubstFont->m_Charset = pFont->m_pSubstFont->m_Charset;\r
-        m_pSubstFont->m_ExtHandle = pFont->m_pSubstFont->m_ExtHandle;\r
-        m_pSubstFont->m_SubstFlags = pFont->m_pSubstFont->m_SubstFlags;\r
-        m_pSubstFont->m_Weight = pFont->m_pSubstFont->m_Weight;\r
-        m_pSubstFont->m_Family = pFont->m_pSubstFont->m_Family;\r
-        m_pSubstFont->m_ItalicAngle = pFont->m_pSubstFont->m_ItalicAngle;\r
-    }\r
-    if (pFont->m_OtfFontData.GetSize()) {\r
-        m_OtfFontData.AttachData(pFont->m_OtfFontData.GetBuffer(), pFont->m_OtfFontData.GetSize());\r
-    }\r
-    m_Face = pFont->m_Face;\r
-    m_bEmbedded = pFont->m_bEmbedded;\r
-    m_bVertical = pFont->m_bVertical;\r
-    m_dwSize = pFont->m_dwSize;\r
-    m_pFontData = pFont->m_pFontData;\r
-    m_pGsubData = pFont->m_pGsubData;\r
-    m_pPlatformFont = pFont->m_pPlatformFont;\r
-    m_pPlatformFontCollection = pFont->m_pPlatformFontCollection;\r
-    m_pDwFont = pFont->m_pDwFont;\r
-    m_hHandle = pFont->m_hHandle;\r
-    m_bDwLoaded = pFont->m_bDwLoaded;\r
-    m_pOwnedStream = pFont->m_pOwnedStream;\r
-    return TRUE;\r
+    m_bLogic = FALSE;
+}
+FX_BOOL CFX_Font::LoadClone(const CFX_Font* pFont)
+{
+    if (pFont == NULL) {
+        return FALSE;
+    }
+    m_bLogic = TRUE;
+    if (pFont->m_pSubstFont) {
+        m_pSubstFont = FX_NEW CFX_SubstFont;
+        if (!m_pSubstFont) {
+            return FALSE;
+        }
+        m_pSubstFont->m_Charset = pFont->m_pSubstFont->m_Charset;
+        m_pSubstFont->m_ExtHandle = pFont->m_pSubstFont->m_ExtHandle;
+        m_pSubstFont->m_SubstFlags = pFont->m_pSubstFont->m_SubstFlags;
+        m_pSubstFont->m_Weight = pFont->m_pSubstFont->m_Weight;
+        m_pSubstFont->m_Family = pFont->m_pSubstFont->m_Family;
+        m_pSubstFont->m_ItalicAngle = pFont->m_pSubstFont->m_ItalicAngle;
+    }
+    if (pFont->m_OtfFontData.GetSize()) {
+        m_OtfFontData.AttachData(pFont->m_OtfFontData.GetBuffer(), pFont->m_OtfFontData.GetSize());
+    }
+    m_Face = pFont->m_Face;
+    m_bEmbedded = pFont->m_bEmbedded;
+    m_bVertical = pFont->m_bVertical;
+    m_dwSize = pFont->m_dwSize;
+    m_pFontData = pFont->m_pFontData;
+    m_pGsubData = pFont->m_pGsubData;
+    m_pPlatformFont = pFont->m_pPlatformFont;
+    m_pPlatformFontCollection = pFont->m_pPlatformFontCollection;
+    m_pDwFont = pFont->m_pDwFont;
+    m_hHandle = pFont->m_hHandle;
+    m_bDwLoaded = pFont->m_bDwLoaded;
+    m_pOwnedStream = pFont->m_pOwnedStream;
+    return TRUE;
 }
 CFX_Font::~CFX_Font()
 {
@@ -68,10 +68,10 @@ CFX_Font::~CFX_Font()
         delete m_pSubstFont;
         m_pSubstFont = NULL;
     }
-    if (m_bLogic) {\r
-        m_OtfFontData.DetachBuffer();\r
-        return;\r
-    }\r
+    if (m_bLogic) {
+        m_OtfFontData.DetachBuffer();
+        return;
+    }
     if (m_Face) {
         if(m_bEmbedded) {
             DeleteFace();
@@ -80,7 +80,7 @@ CFX_Font::~CFX_Font()
         }
     }
     if (m_pOwnedStream) {
-        FX_Free(m_pOwnedStream);
+        FX_Free(m_pOwnedStream); 
         m_pOwnedStream = NULL;
     }
     if (m_pGsubData) {
@@ -137,7 +137,7 @@ extern "C" {
     {
     }
 };
-FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FXFT_Stream* stream, FX_INT32 faceIndex = 0)\r
+FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FXFT_Stream* stream, FX_INT32 faceIndex = 0)
 {
     FXFT_Stream stream1 = (FXFT_Stream)FX_Alloc(FX_BYTE, sizeof (FXFT_StreamRec));
     if (!stream1) {
@@ -152,7 +152,7 @@ FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FX
     FXFT_Open_Args args;
     args.flags = FT_OPEN_STREAM;
     args.stream = stream1;
-    if (FXFT_Open_Face(library, &args, faceIndex, Face)) {\r
+    if (FXFT_Open_Face(library, &args, faceIndex, Face)) {
         FX_Free(stream1);
         return FALSE;
     }
@@ -161,18 +161,18 @@ FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FX
     }
     return TRUE;
 }
-FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile, int nFaceIndex, int* pFaceCount)\r
+FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile, int nFaceIndex, int* pFaceCount)
 {
     m_bEmbedded = FALSE;
     FXFT_Library library;
-    if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL)\r
+    if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL)
         FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
     library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
     FXFT_Stream stream = NULL;
-    if (!_LoadFile(library, &m_Face, pFile, &stream, nFaceIndex))\r
+    if (!_LoadFile(library, &m_Face, pFile, &stream, nFaceIndex))
         return FALSE;
-    if (pFaceCount)\r
-        *pFaceCount = (int)m_Face->num_faces;\r
+    if (pFaceCount)
+        *pFaceCount = (int)m_Face->num_faces;
     m_pOwnedStream = stream;
     FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
     return TRUE;
@@ -479,168 +479,168 @@ IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont)
     pEncoding = FX_NEW CFX_UnicodeEncoding(pFont);
     return pEncoding;
 }
-CFX_FontEncodingEX::CFX_FontEncodingEX()\r
-{\r
-    m_pFont = NULL;\r
-    m_nEncodingID = FXFM_ENCODING_NONE;\r
-}\r
-FX_BOOL CFX_FontEncodingEX::Init(CFX_Font* pFont, FX_DWORD EncodingID)\r
-{\r
-    if (!pFont) {\r
-        return FALSE;\r
-    }\r
-    m_pFont = pFont;\r
-    m_nEncodingID = EncodingID;\r
-    return TRUE;\r
-}\r
-FX_DWORD CFX_FontEncodingEX::GlyphFromCharCode(FX_DWORD charcode)\r
-{\r
-    FXFT_Face face = m_pFont->m_Face;\r
-    FT_UInt nIndex = FXFT_Get_Char_Index(face, charcode);\r
-    if (nIndex > 0) {\r
-        return nIndex;\r
-    }\r
-    int nmaps = FXFT_Get_Face_CharmapCount(face);\r
-    int m = 0;\r
-    while (m < nmaps) {\r
-        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[m++]);\r
-        if (m_nEncodingID == nEncodingID) {\r
-            continue;\r
-        }\r
-        int error = FXFT_Select_Charmap(face, nEncodingID);\r
-        if (error) {\r
-            continue;\r
-        }\r
-        nIndex = FXFT_Get_Char_Index(face, charcode);\r
-        if (nIndex > 0) {\r
-            m_nEncodingID = nEncodingID;\r
-            return nIndex;\r
-        }\r
-    }\r
-    FXFT_Select_Charmap(face, m_nEncodingID);\r
-    return 0;\r
-}\r
-CFX_WideString CFX_FontEncodingEX::UnicodeFromCharCode(FX_DWORD charcode) const\r
-{\r
-    if (m_nEncodingID == FXFM_ENCODING_UNICODE) {\r
-        return CFX_WideString((FX_WCHAR)charcode);\r
-    }\r
-    return CFX_WideString((FX_WCHAR)0);\r
-}\r
-FX_DWORD CFX_FontEncodingEX::CharCodeFromUnicode(FX_WCHAR Unicode) const\r
-{\r
-    if (m_nEncodingID == FXFM_ENCODING_UNICODE || m_nEncodingID == FXFM_ENCODING_MS_SYMBOL) {\r
-        return Unicode;\r
-    }\r
-    FXFT_Face face = m_pFont->m_Face;\r
-    int nmaps = FXFT_Get_Face_CharmapCount(face);\r
-    for (int i = 0; i < nmaps; i++) {\r
-        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i]);\r
-        if (nEncodingID == FXFM_ENCODING_UNICODE || nEncodingID == FXFM_ENCODING_MS_SYMBOL) {\r
-            return Unicode;\r
-        }\r
-    }\r
-    return -1;\r
-}\r
-FX_BOOL CFX_FontEncodingEX::IsUnicodeCompatible() const\r
-{\r
-    return m_nEncodingID == FXFM_ENCODING_UNICODE;\r
-}\r
-FX_DWORD CFX_FontEncodingEX::GlyphIndexFromName(FX_LPCSTR pStrName)\r
-{\r
-    FXFT_Face face = m_pFont->m_Face;\r
-    return FT_Get_Name_Index(face, (FT_String*)pStrName);\r
-}\r
-CFX_ByteString CFX_FontEncodingEX::NameFromGlyphIndex(FX_DWORD dwGlyphIndex)\r
-{\r
-    FXFT_Face face = m_pFont->m_Face;\r
-    CFX_ByteString glyphName("                ");\r
-    if (FT_HAS_GLYPH_NAMES(((FT_Face)face))) {\r
-        if (FT_Get_Glyph_Name((FT_Face)face, dwGlyphIndex, (FT_Pointer)(FX_LPCSTR)glyphName, 16)) {\r
-            glyphName.Empty();\r
-            return glyphName;\r
-        }\r
-        return glyphName;\r
-    } else {\r
-        return glyphName;\r
-    }\r
-}\r
-FX_DWORD CFX_FontEncodingEX::CharCodeFromGlyphIndex(FX_DWORD dwGlyphIndex)\r
-{\r
-    FXFT_Face face = m_pFont->GetFace();\r
-    FX_DWORD  charcode;\r
-    FT_UInt  gid;\r
-    charcode = FT_Get_First_Char((FT_Face)face, &gid);\r
-    while (gid != 0) {\r
-        if (dwGlyphIndex == gid) {\r
-            return charcode;\r
-        }\r
-        charcode = FT_Get_Next_Char((FT_Face)face, charcode, &gid);\r
-    }\r
-    int nmaps = FXFT_Get_Face_CharmapCount(face);\r
-    int m = 0;\r
-    while (m < nmaps) {\r
-        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[m++]);\r
-        if (m_nEncodingID == nEncodingID) {\r
-            continue;\r
-        }\r
-        int error = FXFT_Select_Charmap(face, nEncodingID);\r
-        if (error) {\r
-            continue;\r
-        }\r
-        charcode = FT_Get_First_Char((FT_Face)face, &gid);\r
-        while (gid != 0) {\r
-            if (dwGlyphIndex == gid) {\r
-                m_nEncodingID = nEncodingID;\r
-                return charcode;\r
-            }\r
-            charcode = FT_Get_Next_Char((FT_Face)face, charcode, &gid);\r
-        }\r
-    }\r
-    return (FX_DWORD) - 1;\r
-}\r
-static const FX_DWORD gs_EncodingID[] = {\r
-    FXFM_ENCODING_MS_SYMBOL,\r
-    FXFM_ENCODING_UNICODE,\r
-    FXFM_ENCODING_MS_SJIS,\r
-    FXFM_ENCODING_MS_GB2312,\r
-    FXFM_ENCODING_MS_BIG5,\r
-    FXFM_ENCODING_MS_WANSUNG,\r
-    FXFM_ENCODING_MS_JOHAB,\r
-    FXFM_ENCODING_ADOBE_STANDARD,\r
-    FXFM_ENCODING_ADOBE_EXPERT,\r
-    FXFM_ENCODING_ADOBE_CUSTOM,\r
-    FXFM_ENCODING_ADOBE_LATIN_1,\r
-    FXFM_ENCODING_OLD_LATIN_2,\r
-    FXFM_ENCODING_APPLE_ROMAN\r
-};\r
-static IFX_FontEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont, FX_DWORD nEncodingID)\r
-{\r
-    int error = FXFT_Select_Charmap(pFont->m_Face, nEncodingID);\r
-    if (error) {\r
-        return NULL;\r
-    }\r
-    CFX_FontEncodingEX* pFontEncoding = FX_NEW CFX_FontEncodingEX;\r
-    if (pFontEncoding && !pFontEncoding->Init(pFont, nEncodingID)) {\r
-        delete pFontEncoding;\r
-        pFontEncoding = NULL;\r
-    }\r
-    return pFontEncoding;\r
-}\r
-IFX_FontEncodingEx* FX_CreateFontEncodingEx(CFX_Font* pFont, FX_DWORD nEncodingID)\r
-{\r
-    if (!pFont || !pFont->m_Face) {\r
-        return NULL;\r
-    }\r
-    if (nEncodingID != FXFM_ENCODING_NONE) {\r
-        return _FXFM_CreateFontEncoding(pFont, nEncodingID);\r
-    }\r
-    static int s_count = sizeof(gs_EncodingID) / sizeof(FX_DWORD);\r
-    for (int i = 0; i < s_count; i++) {\r
-        IFX_FontEncodingEx* pFontEncoding = _FXFM_CreateFontEncoding(pFont, gs_EncodingID[i]);\r
-        if (pFontEncoding) {\r
-            return pFontEncoding;\r
-        }\r
-    }\r
-    return NULL;\r
-}\r
+CFX_FontEncodingEX::CFX_FontEncodingEX()
+{
+    m_pFont = NULL;
+    m_nEncodingID = FXFM_ENCODING_NONE;
+}
+FX_BOOL CFX_FontEncodingEX::Init(CFX_Font* pFont, FX_DWORD EncodingID)
+{
+    if (!pFont) {
+        return FALSE;
+    }
+    m_pFont = pFont;
+    m_nEncodingID = EncodingID;
+    return TRUE;
+}
+FX_DWORD CFX_FontEncodingEX::GlyphFromCharCode(FX_DWORD charcode)
+{
+    FXFT_Face face = m_pFont->m_Face;
+    FT_UInt nIndex = FXFT_Get_Char_Index(face, charcode);
+    if (nIndex > 0) {
+        return nIndex;
+    }
+    int nmaps = FXFT_Get_Face_CharmapCount(face);
+    int m = 0;
+    while (m < nmaps) {
+        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[m++]);
+        if (m_nEncodingID == nEncodingID) {
+            continue;
+        }
+        int error = FXFT_Select_Charmap(face, nEncodingID);
+        if (error) {
+            continue;
+        }
+        nIndex = FXFT_Get_Char_Index(face, charcode);
+        if (nIndex > 0) {
+            m_nEncodingID = nEncodingID;
+            return nIndex;
+        }
+    }
+    FXFT_Select_Charmap(face, m_nEncodingID);
+    return 0;
+}
+CFX_WideString CFX_FontEncodingEX::UnicodeFromCharCode(FX_DWORD charcode) const
+{
+    if (m_nEncodingID == FXFM_ENCODING_UNICODE) {
+        return CFX_WideString((FX_WCHAR)charcode);
+    }
+    return CFX_WideString((FX_WCHAR)0);
+}
+FX_DWORD CFX_FontEncodingEX::CharCodeFromUnicode(FX_WCHAR Unicode) const
+{
+    if (m_nEncodingID == FXFM_ENCODING_UNICODE || m_nEncodingID == FXFM_ENCODING_MS_SYMBOL) {
+        return Unicode;
+    }
+    FXFT_Face face = m_pFont->m_Face;
+    int nmaps = FXFT_Get_Face_CharmapCount(face);
+    for (int i = 0; i < nmaps; i++) {
+        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i]);
+        if (nEncodingID == FXFM_ENCODING_UNICODE || nEncodingID == FXFM_ENCODING_MS_SYMBOL) {
+            return Unicode;
+        }
+    }
+    return -1;
+}
+FX_BOOL CFX_FontEncodingEX::IsUnicodeCompatible() const
+{
+    return m_nEncodingID == FXFM_ENCODING_UNICODE;
+}
+FX_DWORD CFX_FontEncodingEX::GlyphIndexFromName(FX_LPCSTR pStrName)
+{
+    FXFT_Face face = m_pFont->m_Face;
+    return FT_Get_Name_Index(face, (FT_String*)pStrName);
+}
+CFX_ByteString CFX_FontEncodingEX::NameFromGlyphIndex(FX_DWORD dwGlyphIndex)
+{
+    FXFT_Face face = m_pFont->m_Face;
+    CFX_ByteString glyphName("                ");
+    if (FT_HAS_GLYPH_NAMES(((FT_Face)face))) {
+        if (FT_Get_Glyph_Name((FT_Face)face, dwGlyphIndex, (FT_Pointer)(FX_LPCSTR)glyphName, 16)) {
+            glyphName.Empty();
+            return glyphName;
+        }
+        return glyphName;
+    } else {
+        return glyphName;
+    }
+}
+FX_DWORD CFX_FontEncodingEX::CharCodeFromGlyphIndex(FX_DWORD dwGlyphIndex)
+{
+    FXFT_Face face = m_pFont->GetFace();
+    FX_DWORD  charcode;
+    FT_UInt  gid;
+    charcode = FT_Get_First_Char((FT_Face)face, &gid);
+    while (gid != 0) {
+        if (dwGlyphIndex == gid) {
+            return charcode;
+        }
+        charcode = FT_Get_Next_Char((FT_Face)face, charcode, &gid);
+    }
+    int nmaps = FXFT_Get_Face_CharmapCount(face);
+    int m = 0;
+    while (m < nmaps) {
+        int nEncodingID = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[m++]);
+        if (m_nEncodingID == nEncodingID) {
+            continue;
+        }
+        int error = FXFT_Select_Charmap(face, nEncodingID);
+        if (error) {
+            continue;
+        }
+        charcode = FT_Get_First_Char((FT_Face)face, &gid);
+        while (gid != 0) {
+            if (dwGlyphIndex == gid) {
+                m_nEncodingID = nEncodingID;
+                return charcode;
+            }
+            charcode = FT_Get_Next_Char((FT_Face)face, charcode, &gid);
+        }
+    }
+    return (FX_DWORD) - 1;
+}
+static const FX_DWORD gs_EncodingID[] = {
+    FXFM_ENCODING_MS_SYMBOL,
+    FXFM_ENCODING_UNICODE,
+    FXFM_ENCODING_MS_SJIS,
+    FXFM_ENCODING_MS_GB2312,
+    FXFM_ENCODING_MS_BIG5,
+    FXFM_ENCODING_MS_WANSUNG,
+    FXFM_ENCODING_MS_JOHAB,
+    FXFM_ENCODING_ADOBE_STANDARD,
+    FXFM_ENCODING_ADOBE_EXPERT,
+    FXFM_ENCODING_ADOBE_CUSTOM,
+    FXFM_ENCODING_ADOBE_LATIN_1,
+    FXFM_ENCODING_OLD_LATIN_2,
+    FXFM_ENCODING_APPLE_ROMAN
+};
+static IFX_FontEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont, FX_DWORD nEncodingID)
+{
+    int error = FXFT_Select_Charmap(pFont->m_Face, nEncodingID);
+    if (error) {
+        return NULL;
+    }
+    CFX_FontEncodingEX* pFontEncoding = FX_NEW CFX_FontEncodingEX;
+    if (pFontEncoding && !pFontEncoding->Init(pFont, nEncodingID)) {
+        delete pFontEncoding;
+        pFontEncoding = NULL;
+    }
+    return pFontEncoding;
+}
+IFX_FontEncodingEx* FX_CreateFontEncodingEx(CFX_Font* pFont, FX_DWORD nEncodingID)
+{
+    if (!pFont || !pFont->m_Face) {
+        return NULL;
+    }
+    if (nEncodingID != FXFM_ENCODING_NONE) {
+        return _FXFM_CreateFontEncoding(pFont, nEncodingID);
+    }
+    static int s_count = sizeof(gs_EncodingID) / sizeof(FX_DWORD);
+    for (int i = 0; i < s_count; i++) {
+        IFX_FontEncodingEx* pFontEncoding = _FXFM_CreateFontEncoding(pFont, gs_EncodingID[i]);
+        if (pFontEncoding) {
+            return pFontEncoding;
+        }
+    }
+    return NULL;
+}
index fce535c..3230ea0 100644 (file)
@@ -394,6 +394,7 @@ void CFX_FontMgr::ReleaseFace(FXFT_Face face)
     if (face == NULL) {
         return;
     }
+    FX_BOOL bFaceDone = FALSE;
     FX_POSITION pos = m_FaceMap.GetStartPosition();
     while(pos) {
         CFX_ByteString Key;
@@ -401,8 +402,12 @@ void CFX_FontMgr::ReleaseFace(FXFT_Face face)
         m_FaceMap.GetNextAssoc(pos, Key, (void*&)ttface);
         if (ttface->ReleaseFace(face)) {
             m_FaceMap.RemoveKey(Key);
+            bFaceDone = TRUE;
         }
     }
+    if (!bFaceDone) {
+        FXFT_Done_Face(face);
+    }
 }
 extern "C" {
     extern const unsigned char g_FoxitFixedItalicFontData [18746];
index 2430324..c9d9a25 100644 (file)
@@ -180,37 +180,7 @@ FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy)
 #define _T(x) x
 #endif
 
-#ifdef API5
-       CPDF_ModuleMgr* g_pModuleMgr = NULL;
-#else
-       CCodec_ModuleMgr*       g_pCodecModule = NULL;
-#endif
-
-//extern CPDFSDK_FormFillApp* g_pFormFillApp;
-
-#if _FX_OS_ == _FX_LINUX_EMBEDDED_
-class CFontMapper : public IPDF_FontMapper
-{
-public:
-       CFontMapper();
-       virtual ~CFontMapper();
-
-       virtual FT_Face FindSubstFont(
-                                                       CPDF_Document* pDoc,                            // [IN] The PDF document
-                                                       const CFX_ByteString& face_name,        // [IN] Original name
-                                                       FX_BOOL bTrueType,                                      // [IN] TrueType or Type1
-                                                       FX_DWORD flags,                                         // [IN] PDF font flags (see PDF Reference section 5.7.1)
-                                                       int font_weight,                                        // [IN] original font weight. 0 for not specified
-                                                       int CharsetCP,                                          // [IN] code page for charset (see Win32 GetACP())
-                                                       FX_BOOL bVertical,
-                                                       CPDF_SubstFont* pSubstFont                      // [OUT] Subst font data
-                                               );
-
-       FT_Face m_SysFace;
-};
-
-CFontMapper* g_pFontMapper = NULL;
-#endif         // #if _FX_OS_ == _FX_LINUX_EMBEDDED_
+CCodec_ModuleMgr*      g_pCodecModule = NULL;
 
 DLLEXPORT void STDCALL FPDF_InitLibrary()
 {
@@ -232,17 +202,9 @@ DLLEXPORT void STDCALL FPDF_InitLibrary()
 DLLEXPORT void STDCALL FPDF_DestroyLibrary()
 {
        FPDFXFA_ReleaseApp();
-
-#if _FX_OS_ == _FX_LINUX_EMBEDDED_
-       if (g_pFontMapper) delete g_pFontMapper;
-#endif
-#ifdef API5
-       g_pModuleMgr->Destroy();
-#else
        CPDF_ModuleMgr::Destroy();
        CFX_GEModule::Destroy();
        g_pCodecModule->Destroy();
-#endif
 }
 
 #ifndef _WIN32
index 03ecb5b..7c2b3d3 100644 (file)
@@ -115,7 +115,7 @@ static void FX_DaysToDate(FX_INT64 iDays, FX_INT32 &iYear, FX_BYTE &iMonth, FX_B
     }\r
     iDay += (FX_BYTE)iDays;\r
 }\r
-#if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_ANDROID_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_\r
+#if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_\r
 #include <time.h>\r
 #include <sys/time.h>\r
 #endif\r
index 51041db..101516f 100644 (file)
@@ -307,7 +307,7 @@ FWL_ERR     CFWL_NoteDriver::Run()
             }\r
         } while (pWidgetMgr->CheckMessage_Native());\r
     }\r
-#elif (_FX_OS_==_FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_)\r
+#elif (_FX_OS_==_FX_LINUX_DESKTOP_)\r
     CFWL_NoteLoop *pTopLoop = NULL;\r
     for (;;) {\r
         pTopLoop = GetTopLoop();\r
index b5e2547..283c328 100644 (file)
@@ -738,7 +738,7 @@ FWL_ERR     CFWL_WidgetMgrDelegate::OnDrawWidget(IFWL_Widget *        pWidget,
         return FWL_ERR_Succeeded;\r
     }\r
     CFX_RectF clipBounds;\r
-#if (_FX_OS_==_FX_WIN32_DESKTOP_) || (_FX_OS_==_FX_WIN64_) || (_FX_OS_ == _FX_LINUX_DESKTOP_) || (_FX_OS_ == _FX_LINUX_EMBEDDED_) || (_FX_OS_ == _FX_ANDROID_)\r
+#if (_FX_OS_==_FX_WIN32_DESKTOP_) || (_FX_OS_==_FX_WIN64_) || (_FX_OS_ == _FX_LINUX_DESKTOP_) || (_FX_OS_ == _FX_ANDROID_)\r
     IFWL_WidgetDelegate *pDelegate = pWidget->SetDelegate(NULL);\r
     pDelegate->OnDrawWidget(pTemp, pMatrix);\r
     pGraphics->GetClipRect(clipBounds);\r