0026611: Visualization, TKService - fix NULL-dereference in Font_FontMgr on broken...
authorkgv <kgv@opencascade.com>
Thu, 3 Sep 2015 11:26:30 +0000 (14:26 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 3 Sep 2015 11:27:31 +0000 (14:27 +0300)
Check FT_Face::family_name for NULL during detection.
Skip fonts without mandatory UNICODE charset in Font_FontMgr.
Test case for issue CR26611
Drop the test case for issue CR26611

src/Font/Font_FontMgr.cxx

index 784ebd3..5832811 100644 (file)
@@ -203,9 +203,14 @@ static Handle(Font_SystemFont) checkFont (const Handle(Font_FTLibrary)& theFTLib
     anAspect = Font_FA_Bold;
   }
 
     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);
 
 
   FT_Done_Face (aFontFace);