From 80094e39f90801c44cd80ab0f98df505828ea1f3 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 16 Nov 2020 23:08:18 +0000 Subject: Revert^2 "libandroidfw hardening for IncFs" 55ef6167a2c235bd88c7216238b2001b46795b79 Change-Id: I02d4890d181655dfd0a14c188468db512559d27b Merged-In: I02d4890d181655dfd0a14c188468db512559d27b --- libs/androidfw/tests/LoadedArsc_test.cpp | 63 +++++++++++++++++--------------- 1 file changed, 33 insertions(+), 30 deletions(-) (limited to 'libs/androidfw/tests/LoadedArsc_test.cpp') diff --git a/libs/androidfw/tests/LoadedArsc_test.cpp b/libs/androidfw/tests/LoadedArsc_test.cpp index 2d69dfe4f429..63574110a817 100644 --- a/libs/androidfw/tests/LoadedArsc_test.cpp +++ b/libs/androidfw/tests/LoadedArsc_test.cpp @@ -50,7 +50,8 @@ TEST(LoadedArscTest, LoadSinglePackageArsc) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/styles/styles.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + auto loaded_arsc = LoadedArsc::Load(reinterpret_cast(contents.data()), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const LoadedPackage* package = @@ -66,9 +67,8 @@ TEST(LoadedArscTest, LoadSinglePackageArsc) { ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - const ResTable_type* type = type_spec->types[0]; - ASSERT_THAT(type, NotNull()); - ASSERT_THAT(LoadedPackage::GetEntry(type, entry_index), NotNull()); + auto type = type_spec->types[0]; + ASSERT_TRUE(LoadedPackage::GetEntry(type, entry_index).has_value()); } TEST(LoadedArscTest, LoadSparseEntryApp) { @@ -76,7 +76,8 @@ TEST(LoadedArscTest, LoadSparseEntryApp) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/sparse/sparse.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const LoadedPackage* package = @@ -90,9 +91,8 @@ TEST(LoadedArscTest, LoadSparseEntryApp) { ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - const ResTable_type* type = type_spec->types[0]; - ASSERT_THAT(type, NotNull()); - ASSERT_THAT(LoadedPackage::GetEntry(type, entry_index), NotNull()); + auto type = type_spec->types[0]; + ASSERT_TRUE(LoadedPackage::GetEntry(type, entry_index).has_value()); } TEST(LoadedArscTest, LoadSharedLibrary) { @@ -100,7 +100,8 @@ TEST(LoadedArscTest, LoadSharedLibrary) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/lib_one/lib_one.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const auto& packages = loaded_arsc->GetPackages(); @@ -120,7 +121,8 @@ TEST(LoadedArscTest, LoadAppLinkedAgainstSharedLibrary) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/libclient/libclient.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const auto& packages = loaded_arsc->GetPackages(); @@ -145,8 +147,10 @@ TEST(LoadedArscTest, LoadAppAsSharedLibrary) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/appaslib/appaslib.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = - LoadedArsc::Load(StringPiece(contents), nullptr /* loaded_idmap */, PROPERTY_DYNAMIC); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length(), + nullptr /* loaded_idmap */, + PROPERTY_DYNAMIC); ASSERT_THAT(loaded_arsc, NotNull()); const auto& packages = loaded_arsc->GetPackages(); @@ -159,7 +163,8 @@ TEST(LoadedArscTest, LoadFeatureSplit) { std::string contents; ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/feature/feature.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const LoadedPackage* package = @@ -172,15 +177,12 @@ TEST(LoadedArscTest, LoadFeatureSplit) { const TypeSpec* type_spec = package->GetTypeSpecByTypeIndex(type_index); ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - ASSERT_THAT(type_spec->types[0], NotNull()); - size_t len; - const char16_t* type_name16 = - package->GetTypeStringPool()->stringAt(type_spec->type_spec->id - 1, &len); - ASSERT_THAT(type_name16, NotNull()); - EXPECT_THAT(util::Utf16ToUtf8(StringPiece16(type_name16, len)), StrEq("string")); + auto type_name16 = package->GetTypeStringPool()->stringAt(type_spec->type_spec->id - 1); + ASSERT_TRUE(type_name16.has_value()); + EXPECT_THAT(util::Utf16ToUtf8(*type_name16), StrEq("string")); - ASSERT_THAT(LoadedPackage::GetEntry(type_spec->types[0], entry_index), NotNull()); + ASSERT_TRUE(LoadedPackage::GetEntry(type_spec->types[0], entry_index).has_value()); } // AAPT(2) generates resource tables with chunks in a certain order. The rule is that @@ -205,7 +207,8 @@ TEST(LoadedArscTest, LoadOutOfOrderTypeSpecs) { ReadFileFromZipToString(GetTestDataPath() + "/out_of_order_types/out_of_order_types.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); ASSERT_THAT(loaded_arsc->GetPackages(), SizeIs(1u)); @@ -215,12 +218,10 @@ TEST(LoadedArscTest, LoadOutOfOrderTypeSpecs) { const TypeSpec* type_spec = package->GetTypeSpecByTypeIndex(0); ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - ASSERT_THAT(type_spec->types[0], NotNull()); type_spec = package->GetTypeSpecByTypeIndex(1); ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - ASSERT_THAT(type_spec->types[0], NotNull()); } TEST(LoadedArscTest, LoadOverlayable) { @@ -228,7 +229,8 @@ TEST(LoadedArscTest, LoadOverlayable) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/overlayable/overlayable.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_THAT(loaded_arsc, NotNull()); const LoadedPackage* package = loaded_arsc->GetPackageById( @@ -272,7 +274,8 @@ TEST(LoadedArscTest, ResourceIdentifierIterator) { ASSERT_TRUE( ReadFileFromZipToString(GetTestDataPath() + "/basic/basic.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_NE(nullptr, loaded_arsc); const std::vector>& packages = loaded_arsc->GetPackages(); @@ -320,7 +323,8 @@ TEST(LoadedArscTest, GetOverlayableMap) { ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/overlayable/overlayable.apk", "resources.arsc", &contents)); - std::unique_ptr loaded_arsc = LoadedArsc::Load(StringPiece(contents)); + std::unique_ptr loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); ASSERT_NE(nullptr, loaded_arsc); const std::vector>& packages = loaded_arsc->GetPackages(); @@ -345,7 +349,7 @@ TEST(LoadedArscTest, LoadCustomLoader) { asset->getLength()); std::unique_ptr loaded_arsc = - LoadedArsc::Load(data, nullptr, PROPERTY_LOADER); + LoadedArsc::Load(data.data(), data.length(), nullptr, PROPERTY_LOADER); ASSERT_THAT(loaded_arsc, NotNull()); const LoadedPackage* package = @@ -361,9 +365,8 @@ TEST(LoadedArscTest, LoadCustomLoader) { ASSERT_THAT(type_spec, NotNull()); ASSERT_THAT(type_spec->type_count, Ge(1u)); - const ResTable_type* type = type_spec->types[0]; - ASSERT_THAT(type, NotNull()); - ASSERT_THAT(LoadedPackage::GetEntry(type, entry_index), NotNull()); + auto type = type_spec->types[0]; + ASSERT_TRUE(LoadedPackage::GetEntry(type, entry_index).has_value()); } // structs with size fields (like Res_value, ResTable_entry) should be -- cgit v1.2.3