Loading cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ interface IIdmap2 { const int POLICY_VENDOR_PARTITION = 0x00000004; const int POLICY_PRODUCT_PARTITION = 0x00000008; const int POLICY_SIGNATURE = 0x00000010; const int POLICY_ODM_PARTITION = 0x00000020; const int POLICY_OEM_PARTITION = 0x00000040; @utf8InCpp String getIdmapPath(@utf8InCpp String overlayApkPath, int userId); boolean removeIdmap(@utf8InCpp String overlayApkPath, int userId); Loading cmds/idmap2/include/idmap2/Policies.h +4 −2 Original line number Diff line number Diff line Loading @@ -26,11 +26,13 @@ namespace android::idmap2 { constexpr const char* kPolicyPublic = "public"; constexpr const char* kPolicyOdm = "odm"; constexpr const char* kPolicyOem = "oem"; constexpr const char* kPolicyProduct = "product"; constexpr const char* kPolicyPublic = "public"; constexpr const char* kPolicySignature = "signature"; constexpr const char* kPolicySystem = "system"; constexpr const char* kPolicyVendor = "vendor"; constexpr const char* kPolicySignature = "signature"; using PolicyFlags = ResTable_overlayable_policy_header::PolicyFlags; using PolicyBitmask = uint32_t; Loading cmds/idmap2/libidmap2/Idmap.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,7 @@ Result<Unit> CheckOverlayable(const LoadedPackage& target_package, const utils::OverlayManifestInfo& overlay_info, const PolicyBitmask& fulfilled_policies, const ResourceId& resid) { static constexpr const PolicyBitmask sDefaultPolicies = PolicyFlags::POLICY_ODM_PARTITION | PolicyFlags::POLICY_OEM_PARTITION | PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION | PolicyFlags::POLICY_PRODUCT_PARTITION | PolicyFlags::POLICY_SIGNATURE; Loading cmds/idmap2/libidmap2/Policies.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #include "idmap2/Policies.h" #include <iterator> #include <map> #include <string> #include <unordered_map> #include <vector> #include "androidfw/ResourceTypes.h" Loading @@ -27,19 +27,17 @@ namespace android::idmap2 { namespace { const std::map<android::StringPiece, PolicyFlags> kStringToFlag = { Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies) { static const std::unordered_map<android::StringPiece, PolicyFlags> kStringToFlag = { {kPolicyOdm, PolicyFlags::POLICY_ODM_PARTITION}, {kPolicyOem, PolicyFlags::POLICY_OEM_PARTITION}, {kPolicyPublic, PolicyFlags::POLICY_PUBLIC}, {kPolicyProduct, PolicyFlags::POLICY_PRODUCT_PARTITION}, {kPolicySignature, PolicyFlags::POLICY_SIGNATURE}, {kPolicySystem, PolicyFlags::POLICY_SYSTEM_PARTITION}, {kPolicyVendor, PolicyFlags::POLICY_VENDOR_PARTITION}, {kPolicySignature, PolicyFlags::POLICY_SIGNATURE}, }; } // namespace Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies) { PolicyBitmask bitmask = 0; for (const std::string& policy : policies) { const auto iter = kStringToFlag.find(policy); Loading @@ -55,6 +53,15 @@ Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { std::vector<std::string> policies; if ((bitmask & PolicyFlags::POLICY_ODM_PARTITION) != 0) { policies.emplace_back(kPolicyOdm); } if ((bitmask & PolicyFlags::POLICY_OEM_PARTITION) != 0) { policies.emplace_back(kPolicyOem); } if ((bitmask & PolicyFlags::POLICY_PUBLIC) != 0) { policies.emplace_back(kPolicyPublic); } Loading @@ -63,6 +70,10 @@ std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { policies.emplace_back(kPolicyProduct); } if ((bitmask & PolicyFlags::POLICY_SIGNATURE) != 0) { policies.emplace_back(kPolicySignature); } if ((bitmask & PolicyFlags::POLICY_SYSTEM_PARTITION) != 0) { policies.emplace_back(kPolicySystem); } Loading @@ -71,10 +82,6 @@ std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { policies.emplace_back(kPolicyVendor); } if ((bitmask & PolicyFlags::POLICY_SIGNATURE) != 0) { policies.emplace_back(kPolicySignature); } return policies; } Loading cmds/idmap2/tests/BinaryStreamVisitorTests.cpp +20 −14 Original line number Diff line number Diff line Loading @@ -109,49 +109,55 @@ TEST(BinaryStreamVisitorTests, CreateIdmapFromApkAssetsInteropWithLoadedIdmap) { success = LoadedIdmap::Lookup(header, 0x0002, &entry); // string/c ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0003, &entry); // string/other success = LoadedIdmap::Lookup(header, 0x0003, &entry); // string/policy_odm ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0004, &entry); // string/not_overlayable success = LoadedIdmap::Lookup(header, 0x0004, &entry); // string/policy_oem ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0005, &entry); // string/policy_product success = LoadedIdmap::Lookup(header, 0x0005, &entry); // string/other ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0006, &entry); // string/policy_public success = LoadedIdmap::Lookup(header, 0x0006, &entry); // string/not_overlayable ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0007, &entry); // string/policy_system success = LoadedIdmap::Lookup(header, 0x0007, &entry); // string/policy_product ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_system_vendor success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_public ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_signature success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_system ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str1 success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/policy_system_vendor ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/policy_signature ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str1 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0000); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str2 success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str2 ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str3 success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/str3 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0001); success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str4 success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/str4 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0002); success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/x success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/x ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/y success = LoadedIdmap::Lookup(header, 0x0011, &entry); // string/y ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/z success = LoadedIdmap::Lookup(header, 0x0012, &entry); // string/z ASSERT_FALSE(success); } Loading Loading
cmds/idmap2/idmap2d/aidl/android/os/IIdmap2.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ interface IIdmap2 { const int POLICY_VENDOR_PARTITION = 0x00000004; const int POLICY_PRODUCT_PARTITION = 0x00000008; const int POLICY_SIGNATURE = 0x00000010; const int POLICY_ODM_PARTITION = 0x00000020; const int POLICY_OEM_PARTITION = 0x00000040; @utf8InCpp String getIdmapPath(@utf8InCpp String overlayApkPath, int userId); boolean removeIdmap(@utf8InCpp String overlayApkPath, int userId); Loading
cmds/idmap2/include/idmap2/Policies.h +4 −2 Original line number Diff line number Diff line Loading @@ -26,11 +26,13 @@ namespace android::idmap2 { constexpr const char* kPolicyPublic = "public"; constexpr const char* kPolicyOdm = "odm"; constexpr const char* kPolicyOem = "oem"; constexpr const char* kPolicyProduct = "product"; constexpr const char* kPolicyPublic = "public"; constexpr const char* kPolicySignature = "signature"; constexpr const char* kPolicySystem = "system"; constexpr const char* kPolicyVendor = "vendor"; constexpr const char* kPolicySignature = "signature"; using PolicyFlags = ResTable_overlayable_policy_header::PolicyFlags; using PolicyBitmask = uint32_t; Loading
cmds/idmap2/libidmap2/Idmap.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,7 @@ Result<Unit> CheckOverlayable(const LoadedPackage& target_package, const utils::OverlayManifestInfo& overlay_info, const PolicyBitmask& fulfilled_policies, const ResourceId& resid) { static constexpr const PolicyBitmask sDefaultPolicies = PolicyFlags::POLICY_ODM_PARTITION | PolicyFlags::POLICY_OEM_PARTITION | PolicyFlags::POLICY_SYSTEM_PARTITION | PolicyFlags::POLICY_VENDOR_PARTITION | PolicyFlags::POLICY_PRODUCT_PARTITION | PolicyFlags::POLICY_SIGNATURE; Loading
cmds/idmap2/libidmap2/Policies.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #include "idmap2/Policies.h" #include <iterator> #include <map> #include <string> #include <unordered_map> #include <vector> #include "androidfw/ResourceTypes.h" Loading @@ -27,19 +27,17 @@ namespace android::idmap2 { namespace { const std::map<android::StringPiece, PolicyFlags> kStringToFlag = { Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies) { static const std::unordered_map<android::StringPiece, PolicyFlags> kStringToFlag = { {kPolicyOdm, PolicyFlags::POLICY_ODM_PARTITION}, {kPolicyOem, PolicyFlags::POLICY_OEM_PARTITION}, {kPolicyPublic, PolicyFlags::POLICY_PUBLIC}, {kPolicyProduct, PolicyFlags::POLICY_PRODUCT_PARTITION}, {kPolicySignature, PolicyFlags::POLICY_SIGNATURE}, {kPolicySystem, PolicyFlags::POLICY_SYSTEM_PARTITION}, {kPolicyVendor, PolicyFlags::POLICY_VENDOR_PARTITION}, {kPolicySignature, PolicyFlags::POLICY_SIGNATURE}, }; } // namespace Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies) { PolicyBitmask bitmask = 0; for (const std::string& policy : policies) { const auto iter = kStringToFlag.find(policy); Loading @@ -55,6 +53,15 @@ Result<PolicyBitmask> PoliciesToBitmask(const std::vector<std::string>& policies std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { std::vector<std::string> policies; if ((bitmask & PolicyFlags::POLICY_ODM_PARTITION) != 0) { policies.emplace_back(kPolicyOdm); } if ((bitmask & PolicyFlags::POLICY_OEM_PARTITION) != 0) { policies.emplace_back(kPolicyOem); } if ((bitmask & PolicyFlags::POLICY_PUBLIC) != 0) { policies.emplace_back(kPolicyPublic); } Loading @@ -63,6 +70,10 @@ std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { policies.emplace_back(kPolicyProduct); } if ((bitmask & PolicyFlags::POLICY_SIGNATURE) != 0) { policies.emplace_back(kPolicySignature); } if ((bitmask & PolicyFlags::POLICY_SYSTEM_PARTITION) != 0) { policies.emplace_back(kPolicySystem); } Loading @@ -71,10 +82,6 @@ std::vector<std::string> BitmaskToPolicies(const PolicyBitmask& bitmask) { policies.emplace_back(kPolicyVendor); } if ((bitmask & PolicyFlags::POLICY_SIGNATURE) != 0) { policies.emplace_back(kPolicySignature); } return policies; } Loading
cmds/idmap2/tests/BinaryStreamVisitorTests.cpp +20 −14 Original line number Diff line number Diff line Loading @@ -109,49 +109,55 @@ TEST(BinaryStreamVisitorTests, CreateIdmapFromApkAssetsInteropWithLoadedIdmap) { success = LoadedIdmap::Lookup(header, 0x0002, &entry); // string/c ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0003, &entry); // string/other success = LoadedIdmap::Lookup(header, 0x0003, &entry); // string/policy_odm ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0004, &entry); // string/not_overlayable success = LoadedIdmap::Lookup(header, 0x0004, &entry); // string/policy_oem ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0005, &entry); // string/policy_product success = LoadedIdmap::Lookup(header, 0x0005, &entry); // string/other ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0006, &entry); // string/policy_public success = LoadedIdmap::Lookup(header, 0x0006, &entry); // string/not_overlayable ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0007, &entry); // string/policy_system success = LoadedIdmap::Lookup(header, 0x0007, &entry); // string/policy_product ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_system_vendor success = LoadedIdmap::Lookup(header, 0x0008, &entry); // string/policy_public ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_signature success = LoadedIdmap::Lookup(header, 0x0009, &entry); // string/policy_system ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/str1 success = LoadedIdmap::Lookup(header, 0x000a, &entry); // string/policy_system_vendor ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/policy_signature ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str1 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0000); success = LoadedIdmap::Lookup(header, 0x000b, &entry); // string/str2 success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str2 ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000c, &entry); // string/str3 success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/str3 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0001); success = LoadedIdmap::Lookup(header, 0x000d, &entry); // string/str4 success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/str4 ASSERT_TRUE(success); ASSERT_EQ(entry, 0x0002); success = LoadedIdmap::Lookup(header, 0x000e, &entry); // string/x success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/x ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x000f, &entry); // string/y success = LoadedIdmap::Lookup(header, 0x0011, &entry); // string/y ASSERT_FALSE(success); success = LoadedIdmap::Lookup(header, 0x0010, &entry); // string/z success = LoadedIdmap::Lookup(header, 0x0012, &entry); // string/z ASSERT_FALSE(success); } Loading