Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41c73434 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "idmap2: include AndroidManifest.xml in CRCs"

parents 74d69971 9371dc17
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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);
}