diff options
author | Adam Lesinski <adamlesinski@google.com> | 2017-10-13 15:45:34 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2017-10-17 16:03:30 -0700 |
commit | 1a1e9c272459f05c846a03fc15989ff7e492517e (patch) | |
tree | 9d5f5c28c08de8be785e66d849975959982d778f /libs/androidfw/tests/AssetManager2_test.cpp | |
parent | 30080e2f282f40222bd9cc617e0c11d63c82f829 (diff) |
AssetManager2: Run ApkAssets that have failed verification
ApkAssets who have failed verification should still run for
compatibility. Not all resources are accessed, and therefore
errors in the APK are not necessarily fatal. However, this means
we must do bounds checks when retrieving resources, which is
slower.
Test: make libandroidfw_tests && $ANDROID_BUILD_TOP/out/host/<host>/nativetest64/libandroidfw_tests/libandroidfw_tests
Test: make libandroidfw_benchmarks && adb sync system && adb sync data && /data/benchmarktest64/libandroidfw_benchmarks/libandroidfw_benchmarks
Change-Id: I4cc926c064bca0491785d82cdac0419d74d7d9b0
Diffstat (limited to 'libs/androidfw/tests/AssetManager2_test.cpp')
-rw-r--r-- | libs/androidfw/tests/AssetManager2_test.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp index fcae53b322b3..ab1a22ed9dc3 100644 --- a/libs/androidfw/tests/AssetManager2_test.cpp +++ b/libs/androidfw/tests/AssetManager2_test.cpp @@ -28,6 +28,7 @@ #include "data/libclient/R.h" #include "data/styles/R.h" #include "data/system/R.h" +#include "data/unverified/R.h" namespace app = com::android::app; namespace appaslib = com::android::appaslib::app; @@ -35,6 +36,7 @@ namespace basic = com::android::basic; namespace lib_one = com::android::lib_one; namespace lib_two = com::android::lib_two; namespace libclient = com::android::libclient; +namespace unverified = com::android::unverified; namespace android { @@ -431,4 +433,30 @@ TEST_F(AssetManager2Test, OpensFileFromSingleApkAssets) {} TEST_F(AssetManager2Test, OpensFileFromMultipleApkAssets) {} +TEST_F(AssetManager2Test, OperateOnUnverifiedApkAssets) { + std::unique_ptr<const ApkAssets> unverified_assets = + ApkAssets::Load(GetTestDataPath() + "/unverified/unverified.apk"); + ASSERT_NE(nullptr, unverified_assets); + + AssetManager2 assetmanager; + assetmanager.SetApkAssets({unverified_assets.get()}); + + Res_value value; + ResTable_config config; + uint32_t flags; + + EXPECT_EQ(kInvalidCookie, + assetmanager.GetResource(unverified::R::string::test1, false /*may_be_bag*/, 0u, &value, + &config, &flags)); + EXPECT_EQ(kInvalidCookie, + assetmanager.GetResource(unverified::R::string::test2, false /*may_be_bag*/, 0u, &value, + &config, &flags)); + EXPECT_NE(kInvalidCookie, + assetmanager.GetResource(unverified::R::integer::number1, false /*may_be_bag*/, 0u, + &value, &config, &flags)); + + EXPECT_EQ(nullptr, assetmanager.GetBag(unverified::R::style::Theme1)); + EXPECT_NE(nullptr, assetmanager.GetBag(unverified::R::array::integerArray1)); +} + } // namespace android |