From 43b9013ec40271360f5bc9dd2c976f7de83791ba Mon Sep 17 00:00:00 2001 From: Dadoum <24679280+Dadoum@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:56:38 +0200 Subject: [PATCH 1/2] Fix SideStore/SideStore#227 Skip signing of objects file in a bundle. Signed-off-by: Dadoum <24679280+Dadoum@users.noreply.github.com> --- ldid.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ldid.cpp b/ldid.cpp index 8fd2f4f..b700494 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -2713,6 +2713,9 @@ Bundle Sign(const std::string &root, Folder &folder, const std::string &key, std case FAT_CIGAM: case MH_MAGIC: case MH_MAGIC_64: case MH_CIGAM: case MH_CIGAM_64: + // Skip object files + if (Swap(mach_header_->filetype) == MH_OBJECT) + break; folder.Save(name, true, flag, fun([&](std::streambuf &save) { Slots slots; Sign(header.bytes, size, data, hash, save, identifier, "", "", key, slots, length, percent); From 742875062cd3d86cd56c0ed6d101f6ff425fc749 Mon Sep 17 00:00:00 2001 From: Dadoum <24679280+Dadoum@users.noreply.github.com> Date: Mon, 15 Sep 2025 10:06:58 +0200 Subject: [PATCH 2/2] Fix the fix It was not compiling before. Signed-off-by: Dadoum <24679280+Dadoum@users.noreply.github.com> --- ldid.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/ldid.cpp b/ldid.cpp index b700494..3f1d8fd 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -2700,28 +2700,36 @@ Bundle Sign(const std::string &root, Folder &folder, const std::string &key, std }; uint8_t bytes[8]; + uint filetype; } header; auto size(most(data, &header.bytes, sizeof(header.bytes))); - if (name != "_WatchKitStub/WK" && size == sizeof(header.bytes)) + if (name != "_WatchKitStub/WK" && size == sizeof(header.bytes)) { switch (Swap(header.magic)) { case FAT_MAGIC: // Java class file format if (Swap(header.count) >= 40) - break; - case FAT_CIGAM: + return; + break; case MH_MAGIC: case MH_MAGIC_64: - case MH_CIGAM: case MH_CIGAM_64: // Skip object files - if (Swap(mach_header_->filetype) == MH_OBJECT) - break; - folder.Save(name, true, flag, fun([&](std::streambuf &save) { - Slots slots; - Sign(header.bytes, size, data, hash, save, identifier, "", "", key, slots, length, percent); - })); - return; + if (header.filetype == MH_OBJECT) + return; + break; + case MH_CIGAM: case MH_CIGAM_64: + // Skip object files (should we swap here?) + if (Swap(header.filetype) == MH_OBJECT) + return; + break; + case FAT_CIGAM: + break; } + folder.Save(name, true, flag, fun([&](std::streambuf &save) { + Slots slots; + Sign(header.bytes, size, data, hash, save, identifier, "", "", key, slots, length, percent); + })); + } folder.Save(name, false, flag, fun([&](std::streambuf &save) { HashProxy proxy(hash, save);