From 618795a214cf8f34c60190d754536fd060664121 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Tue, 4 Jul 2023 09:09:40 +0300 Subject: [PATCH] [macOS] Fix set_native_icon crash with empty or invalid ICNS file. --- platform/macos/display_server_macos.mm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index 973925a003a..5ccef68e7f0 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -3588,16 +3588,22 @@ void DisplayServerMacOS::set_native_icon(const String &p_filename) { Vector data; uint64_t len = f->get_length(); + ERR_FAIL_COND_MSG(len < 8, "Error reading icon data."); // "icns" + 32-bit length + data.resize(len); f->get_buffer((uint8_t *)&data.write[0], len); - NSData *icon_data = [[NSData alloc] initWithBytes:&data.write[0] length:len]; - ERR_FAIL_COND_MSG(!icon_data, "Error reading icon data."); + @try { + NSData *icon_data = [[NSData alloc] initWithBytes:&data.write[0] length:len]; + ERR_FAIL_COND_MSG(!icon_data, "Error reading icon data."); - NSImage *icon = [[NSImage alloc] initWithData:icon_data]; - ERR_FAIL_COND_MSG(!icon, "Error loading icon."); + NSImage *icon = [[NSImage alloc] initWithData:icon_data]; + ERR_FAIL_COND_MSG(!icon, "Error loading icon."); - [NSApp setApplicationIconImage:icon]; + [NSApp setApplicationIconImage:icon]; + } @catch (NSException *exception) { + ERR_FAIL_MSG("NSException: " + String::utf8([exception reason].UTF8String)); + } } void DisplayServerMacOS::set_icon(const Ref &p_icon) {