1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

[macOS/iOS] Fix system font family descriptor leak.

(cherry picked from commit c5dcecc6f7)
This commit is contained in:
Pāvels Nadtočajevs
2025-03-09 20:57:57 +02:00
committed by Rémi Verschelde
parent ab037eada2
commit efb3cf1db4
2 changed files with 34 additions and 28 deletions

View File

@@ -534,23 +534,26 @@ Vector<String> OS_IOS::get_system_font_path_for_text(const String &p_font_name,
CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes); CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes);
if (font) { if (font) {
CTFontRef family = CTFontCreateWithFontDescriptor(font, 0, nullptr); CTFontRef family = CTFontCreateWithFontDescriptor(font, 0, nullptr);
CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, p_text.utf8().get_data(), kCFStringEncodingUTF8); if (family) {
CFRange range = CFRangeMake(0, CFStringGetLength(string)); CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, p_text.utf8().get_data(), kCFStringEncodingUTF8);
CTFontRef fallback_family = CTFontCreateForString(family, string, range); CFRange range = CFRangeMake(0, CFStringGetLength(string));
if (fallback_family) { CTFontRef fallback_family = CTFontCreateForString(family, string, range);
CTFontDescriptorRef fallback_font = CTFontCopyFontDescriptor(fallback_family); if (fallback_family) {
if (fallback_font) { CTFontDescriptorRef fallback_font = CTFontCopyFontDescriptor(fallback_family);
CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fallback_font, kCTFontURLAttribute); if (fallback_font) {
if (url) { CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fallback_font, kCTFontURLAttribute);
NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]]; if (url) {
ret.push_back(String::utf8([font_path UTF8String])); NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]];
CFRelease(url); ret.push_back(String::utf8([font_path UTF8String]));
CFRelease(url);
}
CFRelease(fallback_font);
} }
CFRelease(fallback_font); CFRelease(fallback_family);
} }
CFRelease(fallback_family); CFRelease(string);
CFRelease(family);
} }
CFRelease(string);
CFRelease(font); CFRelease(font);
} }

View File

@@ -544,23 +544,26 @@ Vector<String> OS_MacOS::get_system_font_path_for_text(const String &p_font_name
CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes); CTFontDescriptorRef font = CTFontDescriptorCreateWithAttributes(attributes);
if (font) { if (font) {
CTFontRef family = CTFontCreateWithFontDescriptor(font, 0, nullptr); CTFontRef family = CTFontCreateWithFontDescriptor(font, 0, nullptr);
CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, p_text.utf8().get_data(), kCFStringEncodingUTF8); if (family) {
CFRange range = CFRangeMake(0, CFStringGetLength(string)); CFStringRef string = CFStringCreateWithCString(kCFAllocatorDefault, p_text.utf8().get_data(), kCFStringEncodingUTF8);
CTFontRef fallback_family = CTFontCreateForString(family, string, range); CFRange range = CFRangeMake(0, CFStringGetLength(string));
if (fallback_family) { CTFontRef fallback_family = CTFontCreateForString(family, string, range);
CTFontDescriptorRef fallback_font = CTFontCopyFontDescriptor(fallback_family); if (fallback_family) {
if (fallback_font) { CTFontDescriptorRef fallback_font = CTFontCopyFontDescriptor(fallback_family);
CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fallback_font, kCTFontURLAttribute); if (fallback_font) {
if (url) { CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fallback_font, kCTFontURLAttribute);
NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]]; if (url) {
ret.push_back(String::utf8([font_path UTF8String])); NSString *font_path = [NSString stringWithString:[(__bridge NSURL *)url path]];
CFRelease(url); ret.push_back(String::utf8([font_path UTF8String]));
CFRelease(url);
}
CFRelease(fallback_font);
} }
CFRelease(fallback_font); CFRelease(fallback_family);
} }
CFRelease(fallback_family); CFRelease(string);
CFRelease(family);
} }
CFRelease(string);
CFRelease(font); CFRelease(font);
} }