From 2179ffd8ebd8cf58fabafb033af4862700603596 Mon Sep 17 00:00:00 2001 From: opa334 Date: Mon, 19 Feb 2024 17:04:46 +0100 Subject: [PATCH] Fix launchd crash --- BaseBin/libjailbreak/src/signatures.m | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/BaseBin/libjailbreak/src/signatures.m b/BaseBin/libjailbreak/src/signatures.m index 87cfdcc78..d6676348d 100644 --- a/BaseBin/libjailbreak/src/signatures.m +++ b/BaseBin/libjailbreak/src/signatures.m @@ -63,11 +63,11 @@ bool csd_superblob_is_adhoc_signed(CS_DecodedSuperBlob *superblob) NSString *(^resolveLoaderExecutablePaths)(NSString *) = ^NSString *(NSString *candidatePath) { if (!candidatePath) return nil; if ([[NSFileManager defaultManager] fileExistsAtPath:candidatePath]) return candidatePath; - if ([candidatePath hasPrefix:@"@loader_path"]) { + if ([candidatePath hasPrefix:@"@loader_path"] && loaderPath) { NSString *loaderCandidatePath = [candidatePath stringByReplacingOccurrencesOfString:@"@loader_path" withString:loaderPath]; if ([[NSFileManager defaultManager] fileExistsAtPath:loaderCandidatePath]) return loaderCandidatePath; } - if ([candidatePath hasPrefix:@"@executable_path"]) { + if ([candidatePath hasPrefix:@"@executable_path"] && executablePath) { NSString *executableCandidatePath = [candidatePath stringByReplacingOccurrencesOfString:@"@executable_path" withString:executablePath]; if ([[NSFileManager defaultManager] fileExistsAtPath:executableCandidatePath]) return executableCandidatePath; } @@ -83,11 +83,14 @@ bool csd_superblob_is_adhoc_signed(CS_DecodedSuperBlob *superblob) MachO *macho = ljb_fat_find_preferred_slice(fat); if (macho) { macho_enumerate_rpaths(macho, ^(const char *rpathC, bool *stop) { - if (!rpathC) return; - NSString *rpath = [NSString stringWithUTF8String:rpathC]; - rpathResolvedPath = resolveLoaderExecutablePaths([dylibPath stringByReplacingOccurrencesOfString:@"@rpath" withString:rpath]); - if (rpathResolvedPath) { - *stop = true; + if (rpathC) { + NSString *rpath = [NSString stringWithUTF8String:rpathC]; + if (rpath) { + rpathResolvedPath = resolveLoaderExecutablePaths([dylibPath stringByReplacingOccurrencesOfString:@"@rpath" withString:rpath]); + if (rpathResolvedPath) { + *stop = true; + } + } } }); }