Sandbox: Fix missing file handler crash

Apparently, NSURL path for fileURL can return nil if the resource no
longer exists, or something. Better fail gracefully than cause a crash.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-06-07 05:41:21 -07:00
parent 0d06590c23
commit 6e655bf4b1

View file

@ -100,6 +100,7 @@ static SandboxBroker *kSharedSandboxBroker = nil;
if(![url isFileURL]) return url; if(![url isFileURL]) return url;
NSString *s = [url path]; NSString *s = [url path];
if(!s) return NULL; // Cool, the resource no longer exists!
NSRange fragmentRange = [s rangeOfString:@"#" NSRange fragmentRange = [s rangeOfString:@"#"
options:NSBackwardsSearch]; options:NSBackwardsSearch];
@ -270,6 +271,7 @@ static inline void dispatch_async_reentrant(dispatch_queue_t queue, dispatch_blo
if(![fileUrl isFileURL]) return; if(![fileUrl isFileURL]) return;
NSURL *url = [SandboxBroker urlWithoutFragment:fileUrl]; NSURL *url = [SandboxBroker urlWithoutFragment:fileUrl];
if(!url) return;
dispatch_async_reentrant(dispatch_get_main_queue(), ^{ dispatch_async_reentrant(dispatch_get_main_queue(), ^{
SandboxEntry *_entry = nil; SandboxEntry *_entry = nil;
@ -422,7 +424,7 @@ static inline void dispatch_async_reentrant(dispatch_queue_t queue, dispatch_blo
- (const void *)beginFolderAccess:(NSURL *)fileUrl { - (const void *)beginFolderAccess:(NSURL *)fileUrl {
if(!fileUrl) return NULL; if(!fileUrl) return NULL;
NSURL *folderUrl = [SandboxBroker urlWithoutFragment:fileUrl]; NSURL *folderUrl = [SandboxBroker urlWithoutFragment:fileUrl];
if(![folderUrl isFileURL]) return NULL; if(!folderUrl || ![folderUrl isFileURL]) return NULL;
__block SandboxEntry *_entry = nil; __block SandboxEntry *_entry = nil;