mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-17 17:02:51 +08:00
Don't crash on unexpected CTFontDescription content
Don't crash in wxNativeFontInfo::InitFromDescriptor() in wxOSX when the provided descriptor doesn't contain kCTFontTraitsAttribute. This can happen e.g. when the descriptor was deserialized from a plist dictionary and the corresponding font is not present on the system. Closes #26411.
This commit is contained in:
committed by
Vadim Zeitlin
parent
dbce2cf0d1
commit
bbdbf45dce
@@ -887,9 +887,10 @@ void wxNativeFontInfo::InitFromFontDescriptor(CTFontDescriptorRef desc)
|
||||
|
||||
// determine approximate family
|
||||
|
||||
CTFontSymbolicTraits symbolicTraits;
|
||||
CTFontSymbolicTraits symbolicTraits = 0;
|
||||
wxCFDictionaryRef traits((CFDictionaryRef)CTFontDescriptorCopyAttribute(desc, kCTFontTraitsAttribute));
|
||||
traits.GetValue(kCTFontSymbolicTrait).GetValue((int32_t*)&symbolicTraits, 0);
|
||||
if (traits)
|
||||
traits.GetValue(kCTFontSymbolicTrait).GetValue((int32_t*)&symbolicTraits, 0);
|
||||
|
||||
if (symbolicTraits & kCTFontMonoSpaceTrait)
|
||||
m_family = wxFONTFAMILY_TELETYPE;
|
||||
@@ -1026,6 +1027,8 @@ CGFloat wxNativeFontInfo::GetCTWeight(CTFontDescriptorRef descr)
|
||||
{
|
||||
CGFloat weight;
|
||||
CFTypeRef fonttraitstype = CTFontDescriptorCopyAttribute(descr, kCTFontTraitsAttribute);
|
||||
if (!fonttraitstype)
|
||||
return CGFloat(0.0);
|
||||
wxCFDictionaryRef traits((CFDictionaryRef)fonttraitstype);
|
||||
traits.GetValue(kCTFontWeightTrait).GetValue(&weight, CGFloat(0.0));
|
||||
return weight;
|
||||
@@ -1035,6 +1038,8 @@ CGFloat wxNativeFontInfo::GetCTwidth(CTFontDescriptorRef descr)
|
||||
{
|
||||
CGFloat weight;
|
||||
CFTypeRef fonttraitstype = CTFontDescriptorCopyAttribute(descr, kCTFontTraitsAttribute);
|
||||
if (!fonttraitstype)
|
||||
return CGFloat(0.0);
|
||||
wxCFDictionaryRef traits((CFDictionaryRef)fonttraitstype);
|
||||
traits.GetValue(kCTFontWidthTrait).GetValue(&weight, CGFloat(0.0));
|
||||
return weight;
|
||||
@@ -1044,6 +1049,8 @@ CGFloat wxNativeFontInfo::GetCTSlant(CTFontDescriptorRef descr)
|
||||
{
|
||||
CGFloat slant;
|
||||
CFTypeRef fonttraitstype = CTFontDescriptorCopyAttribute(descr, kCTFontTraitsAttribute);
|
||||
if (!fonttraitstype)
|
||||
return CGFloat(0.0);
|
||||
wxCFDictionaryRef traits((CFDictionaryRef)fonttraitstype);
|
||||
traits.GetValue(kCTFontSlantTrait).GetValue(&slant, CGFloat(0.0));
|
||||
return slant;
|
||||
|
||||
Reference in New Issue
Block a user