]> git.saurik.com Git - ldid.git/commitdiff
Correctly handle nesting frameworks in frameworks.
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 27 Jan 2022 09:05:29 +0000 (01:05 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 27 Jan 2022 09:05:29 +0000 (01:05 -0800)
ldid.cpp

index 0d4cb735e2f6d6b8d971f2f3df87101a61c04129..78fd73a481d7716b5e910b66f0672c69947fe39f 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -2782,7 +2782,7 @@ struct State {
     }
 };
 
-Bundle Sign(const std::string &root, Folder &parent, const std::string &key, State &remote, const std::string &requirements, const Functor<std::string (const std::string &, const std::string &)> &alter, const Progress &progress) {
+Bundle Sign(const std::string &root, Folder &parent, const std::string &key, State &local, const std::string &requirements, const Functor<std::string (const std::string &, const std::string &)> &alter, const Progress &progress) {
     std::string executable;
     std::string identifier;
 
@@ -2861,8 +2861,6 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
         rules2.insert(Rule{20, NoMode, "^version\\.plist$"});
     }
 
-    State local;
-
     std::string failure(mac ? "Contents/|Versions/[^/]*/Resources/" : "");
     Expression nested("^(Frameworks/[^/]*\\.framework|PlugIns/[^/]*\\.appex(()|/[^/]*.app))/(" + failure + ")Info\\.plist$");
     std::map<std::string, Bundle> bundles;
@@ -2870,16 +2868,18 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
     folder.Find("", fun([&](const std::string &name) {
         if (!nested(name))
             return;
-        auto bundle(root + Split(name).dir);
+        auto bundle(Split(name).dir);
         if (mac) {
             _assert(!bundle.empty());
             bundle = Split(bundle.substr(0, bundle.size() - 1)).dir;
         }
         SubFolder subfolder(folder, bundle);
 
-        bundles[nested[1]] = Sign(bundle, subfolder, key, local, "", Starts(name, "PlugIns/") ? alter :
+        State remote;
+        bundles[nested[1]] = Sign(root + bundle, subfolder, key, remote, "", Starts(name, "PlugIns/") ? alter :
             static_cast<const Functor<std::string (const std::string &, const std::string &)> &>(fun([&](const std::string &, const std::string &) -> std::string { return entitlements; }))
         , progress);
+        local.Merge(bundle, remote);
     }), fun([&](const std::string &name, const Functor<std::string ()> &read) {
     }));
 
@@ -3066,7 +3066,6 @@ Bundle Sign(const std::string &root, Folder &parent, const std::string &key, Sta
         }));
     }));
 
-    remote.Merge(root, local);
     return bundle;
 }