Do reconfigure the cascade list for Emoji font on OS X 10.9.5 (#313)
authorDominik Röttsches <d-r@roettsches.de>
Wed, 7 Sep 2016 20:56:57 +0000 (23:56 +0300)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 7 Sep 2016 20:56:57 +0000 (13:56 -0700)
This seems to fix crash issues on 10.9.5 reported on Chrome, compare
crbug.com/549610

src/hb-coretext.cc

index 9e24e90..ee7f91c 100644 (file)
@@ -149,9 +149,16 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
   /* crbug.com/576941 and crbug.com/625902 and the investigation in the latter
    * bug indicate that the cascade list reconfiguration occasionally causes
    * crashes in CoreText on OS X 10.9, thus let's skip this step on older
-   * operating system versions. */
-  if (&CTGetCoreTextVersion != NULL && CTGetCoreTextVersion() <= kCTVersionNumber10_9)
-    return ct_font;
+   * operating system versions. Except for the emoji font, where _not_
+   * reconfiguring the cascade list causes CoreText crashes. For details, see
+   * crbug.com/549610 */
+  if (&CTGetCoreTextVersion != NULL && CTGetCoreTextVersion() < kCTVersionNumber10_10) {
+    CFStringRef fontName = CTFontCopyPostScriptName (ct_font);
+    bool isEmojiFont = CFStringCompare (fontName, CFSTR("AppleColorEmoji"), 0) == kCFCompareEqualTo;
+    CFRelease (fontName);
+    if (!isEmojiFont)
+      return ct_font;
+  }
 
   CFURLRef original_url = (CFURLRef)CTFontCopyAttribute(ct_font, kCTFontURLAttribute);