diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | macosx/tkMacOSXFont.c | 18 |
2 files changed, 19 insertions, 4 deletions
@@ -1,3 +1,8 @@ +2009-12-06 Benjamin Riefenstahl <b.riefenstahl@turtle-trading.net> + + * macosx/tkMacOSXFont.c (GetFontFamilyName): [Bug #2548661] Merge fix + from HEAD (1.44). + 2009-12-03 Pat Thoyts <patthoyts@users.sourceforge.net> * library/ttk/xpTheme.tcl: Fix selection of treeview rows on diff --git a/macosx/tkMacOSXFont.c b/macosx/tkMacOSXFont.c index 7a7cfc8..09d8782 100644 --- a/macosx/tkMacOSXFont.c +++ b/macosx/tkMacOSXFont.c @@ -35,7 +35,7 @@ * that such fonts can not be used for controls, because controls * definitely require a family id (this assertion needs testing). * - * RCS: @(#) $Id: tkMacOSXFont.c,v 1.37.2.3 2008/08/19 00:19:10 das Exp $ + * RCS: @(#) $Id: tkMacOSXFont.c,v 1.37.2.4 2009/12/06 17:15:25 cc_benny Exp $ */ #include "tkMacOSXPrivate.h" @@ -2128,7 +2128,9 @@ GetFontFamilyName( /* * QuickDraw font names are encoded with the script that the font uses. - * So we determine that encoding and than we reencode the name. + * So we determine that encoding and than we reencode the name. We + * pre-set the encoding with the default value, so we do not need to + * check result codes here. */ encoding = kTextEncodingMacRoman; @@ -2145,12 +2147,20 @@ GetFontFamilyName( * have seen CFStringGetCString() crash with invalid encoding ids. But * than if that happens it would be a bug in * FMGetFontFamilyTextEncoding() or RevertTextEncodingToScriptInfo(). + * Another problem is that users have seen CFStringCreate return null + * (Bug #2548661). This is due to font names with a bad encoding. */ cfString = CFStringCreateWithPascalStringNoCopy( NULL, nativeName, nameencoding, kCFAllocatorNull); - CFStringGetCString( - cfString, name, numBytes, kCFStringEncodingUTF8); + if (cfString == NULL) { + TkMacOSXDbgMsg("CFStringCreate: " + "'%.*s' could not be decoded with encoding %d", + nativeName[0], nativeName+1, (int) nameencoding); + return kTextMalformedInputErr; + } + + CFStringGetCString(cfString, name, numBytes, kCFStringEncodingUTF8); CFRelease(cfString); return noErr; |