From 0b94a4f33dee183c71ad63a7e37c6e7c1f4e4320 Mon Sep 17 00:00:00 2001 From: kgv Date: Thu, 27 Aug 2015 12:34:09 +0300 Subject: [PATCH] 0026611: Visualization, TKService - fix NULL-dereference in Font_FontMgr on broken font Check FT_Face::family_name for NULL during detection. Skip fonts without mandatory UNICODE charset in Font_FontMgr. --- src/Font/Font_FontMgr.cxx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Font/Font_FontMgr.cxx b/src/Font/Font_FontMgr.cxx index 3cd84af577..245c20957c 100644 --- a/src/Font/Font_FontMgr.cxx +++ b/src/Font/Font_FontMgr.cxx @@ -202,9 +202,14 @@ static Handle(Font_SystemFont) checkFont (const Handle(Font_FTLibrary)& theFTLib anAspect = Font_FA_Bold; } - Handle(TCollection_HAsciiString) aFontName = new TCollection_HAsciiString (aFontFace->family_name); - Handle(TCollection_HAsciiString) aFontPath = new TCollection_HAsciiString (theFontPath); - Handle(Font_SystemFont) aResult = new Font_SystemFont (aFontName, anAspect, aFontPath); + Handle(Font_SystemFont) aResult; + if (aFontFace->family_name != NULL // skip broken fonts (error in FreeType?) + && FT_Select_Charmap (aFontFace, ft_encoding_unicode) == 0) // Font_FTFont supports only UNICODE fonts + { + Handle(TCollection_HAsciiString) aFontName = new TCollection_HAsciiString (aFontFace->family_name); + Handle(TCollection_HAsciiString) aFontPath = new TCollection_HAsciiString (theFontPath); + aResult = new Font_SystemFont (aFontName, anAspect, aFontPath); + } FT_Done_Face (aFontFace);