| Index: src/ports/SkFontConfigInterface_direct.cpp
|
| diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp
|
| index 345544724695a1729e1644693199f45f49913148..8fe9898bc719e9cf4be76663ad3769d3caf55422 100644
|
| --- a/src/ports/SkFontConfigInterface_direct.cpp
|
| +++ b/src/ports/SkFontConfigInterface_direct.cpp
|
| @@ -496,6 +496,10 @@ static void fcpattern_from_skfontstyle(SkFontStyle style, FcPattern* pattern) {
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| #define kMaxFontFamilyLength 2048
|
| +#ifdef SK_FONT_CONFIG_INTERFACE_ONLY_ALLOW_SFNT_FONTS
|
| +const char* kFontFormatTrueType = "TrueType";
|
| +const char* kFontFormatCFF = "CFF";
|
| +#endif
|
|
|
| SkFontConfigInterfaceDirect::SkFontConfigInterfaceDirect() {
|
| FCLocker lock;
|
| @@ -524,6 +528,16 @@ bool SkFontConfigInterfaceDirect::isValidPattern(FcPattern* pattern) {
|
| }
|
| #endif
|
|
|
| +#ifdef SK_FONT_CONFIG_INTERFACE_ONLY_ALLOW_SFNT_FONTS
|
| + const char* font_format = get_name(pattern, FC_FONTFORMAT);
|
| + if (font_format
|
| + && strcmp(font_format, kFontFormatTrueType) != 0
|
| + && strcmp(font_format, kFontFormatCFF) != 0)
|
| + {
|
| + return false;
|
| + }
|
| +#endif
|
| +
|
| // fontconfig can also return fonts which are unreadable
|
| const char* c_filename = get_name(pattern, FC_FILE);
|
| if (!c_filename) {
|
| @@ -593,6 +607,11 @@ bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[],
|
|
|
| FcPatternAddBool(pattern, FC_SCALABLE, FcTrue);
|
|
|
| +#ifdef SK_FONT_CONFIG_INTERFACE_ONLY_ALLOW_SFNT_FONTS
|
| + FcPatternAddString(pattern, FC_FONTFORMAT, reinterpret_cast<const FcChar8*>(kFontFormatTrueType));
|
| + FcPatternAddString(pattern, FC_FONTFORMAT, reinterpret_cast<const FcChar8*>(kFontFormatCFF));
|
| +#endif
|
| +
|
| FcConfigSubstitute(nullptr, pattern, FcMatchPattern);
|
| FcDefaultSubstitute(pattern);
|
|
|
|
|