diff options
| -rw-r--r-- | cmds/idmap2/libidmap2/Idmap.cpp | 14 | ||||
| -rw-r--r-- | cmds/idmap2/tests/IdmapTests.cpp | 4 | ||||
| -rw-r--r-- | cmds/idmap2/tests/RawPrintVisitorTests.cpp | 4 |
3 files changed, 14 insertions, 8 deletions
diff --git a/cmds/idmap2/libidmap2/Idmap.cpp b/cmds/idmap2/libidmap2/Idmap.cpp index fa5ac8ea11dc..b19d7a971cb8 100644 --- a/cmds/idmap2/libidmap2/Idmap.cpp +++ b/cmds/idmap2/libidmap2/Idmap.cpp @@ -117,6 +117,12 @@ const LoadedPackage* GetPackageAtIndex0(const LoadedArsc& loaded_arsc) { return loaded_arsc.GetPackageById(id); } +Result<uint32_t> GetCrc(const ZipFile& zip) { + const Result<uint32_t> a = zip.Crc("resources.arsc"); + const Result<uint32_t> b = zip.Crc("AndroidManifest.xml"); + return a && b ? Result<uint32_t>(*a ^ *b) : kResultError; +} + } // namespace std::unique_ptr<const IdmapHeader> IdmapHeader::FromBinaryStream(std::istream& stream) { @@ -153,7 +159,7 @@ bool IdmapHeader::IsUpToDate(std::ostream& out_error) const { return false; } - Result<uint32_t> target_crc = target_zip->Crc("resources.arsc"); + Result<uint32_t> target_crc = GetCrc(*target_zip); if (!target_crc) { out_error << "error: failed to get target crc" << std::endl; return false; @@ -173,7 +179,7 @@ bool IdmapHeader::IsUpToDate(std::ostream& out_error) const { return false; } - Result<uint32_t> overlay_crc = overlay_zip->Crc("resources.arsc"); + Result<uint32_t> overlay_crc = GetCrc(*overlay_zip); if (!overlay_crc) { out_error << "error: failed to get overlay crc" << std::endl; return false; @@ -356,14 +362,14 @@ std::unique_ptr<const Idmap> Idmap::FromApkAssets( header->magic_ = kIdmapMagic; header->version_ = kIdmapCurrentVersion; - Result<uint32_t> crc = target_zip->Crc("resources.arsc"); + Result<uint32_t> crc = GetCrc(*target_zip); if (!crc) { out_error << "error: failed to get zip crc for target" << std::endl; return nullptr; } header->target_crc_ = *crc; - crc = overlay_zip->Crc("resources.arsc"); + crc = GetCrc(*overlay_zip); if (!crc) { out_error << "error: failed to get zip crc for overlay" << std::endl; return nullptr; diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp index 9e27ccd7cfbb..b40521f054af 100644 --- a/cmds/idmap2/tests/IdmapTests.cpp +++ b/cmds/idmap2/tests/IdmapTests.cpp @@ -191,8 +191,8 @@ TEST(IdmapTests, CreateIdmapFromApkAssets) { ASSERT_THAT(idmap->GetHeader(), NotNull()); ASSERT_EQ(idmap->GetHeader()->GetMagic(), 0x504d4449U); ASSERT_EQ(idmap->GetHeader()->GetVersion(), 0x01U); - ASSERT_EQ(idmap->GetHeader()->GetTargetCrc(), 0xab7cf70d); - ASSERT_EQ(idmap->GetHeader()->GetOverlayCrc(), 0xd470336b); + ASSERT_EQ(idmap->GetHeader()->GetTargetCrc(), 0xdd53ca29); + ASSERT_EQ(idmap->GetHeader()->GetOverlayCrc(), 0xa71ccd77); ASSERT_EQ(idmap->GetHeader()->GetTargetPath().to_string(), target_apk_path); ASSERT_EQ(idmap->GetHeader()->GetOverlayPath(), overlay_apk_path); ASSERT_EQ(idmap->GetHeader()->GetOverlayPath(), overlay_apk_path); diff --git a/cmds/idmap2/tests/RawPrintVisitorTests.cpp b/cmds/idmap2/tests/RawPrintVisitorTests.cpp index b1ca12557dcb..a5588c330d85 100644 --- a/cmds/idmap2/tests/RawPrintVisitorTests.cpp +++ b/cmds/idmap2/tests/RawPrintVisitorTests.cpp @@ -52,8 +52,8 @@ TEST(RawPrintVisitorTests, CreateRawPrintVisitor) { ASSERT_NE(stream.str().find("00000000: 504d4449 magic\n"), std::string::npos); ASSERT_NE(stream.str().find("00000004: 00000001 version\n"), std::string::npos); - ASSERT_NE(stream.str().find("00000008: ab7cf70d target crc\n"), std::string::npos); - ASSERT_NE(stream.str().find("0000000c: d470336b overlay crc\n"), std::string::npos); + ASSERT_NE(stream.str().find("00000008: dd53ca29 target crc\n"), std::string::npos); + ASSERT_NE(stream.str().find("0000000c: a71ccd77 overlay crc\n"), std::string::npos); ASSERT_NE(stream.str().find("0000021c: 00000000 0x7f010000 -> 0x7f010000 integer/int1\n"), std::string::npos); } |