summaryrefslogtreecommitdiff
path: root/libs/androidfw/tests/AssetManager2_test.cpp
diff options
context:
space:
mode:
authory <rtmitchell@google.com>2018-04-12 14:26:23 -0700
committery <rtmitchell@google.com>2018-04-13 08:50:09 -0700
commit57cd195c4303ff248c6e016d51e3b7632cf69bae (patch)
tree301a7bf02888ac353e661792bfde9a4dd04273d6 /libs/androidfw/tests/AssetManager2_test.cpp
parent65317bac02e993d1313a1958a8497ff5f2a2ecd5 (diff)
AAPT2: GetBag infinite recursion fix
Style resources with circular parental dependencies caused infinite recursion when calling AssetManager2::GetBag. This fix allows recursion to cease when a circular dependency is found. Bug: 77928512 Change-Id: Ib900c36ab1aef5da5b03234a9484c4dad3b63c02 Test: Manual test of b/77928512 and duplicates of 74493983
Diffstat (limited to 'libs/androidfw/tests/AssetManager2_test.cpp')
-rw-r--r--libs/androidfw/tests/AssetManager2_test.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp
index 7cac2b3417b5..3118009fef90 100644
--- a/libs/androidfw/tests/AssetManager2_test.cpp
+++ b/libs/androidfw/tests/AssetManager2_test.cpp
@@ -329,6 +329,17 @@ TEST_F(AssetManager2Test, MergesStylesWithParentFromSingleApkAssets) {
EXPECT_EQ(0, bag_two->entries[5].cookie);
}
+TEST_F(AssetManager2Test, MergeStylesCircularDependency) {
+ AssetManager2 assetmanager;
+ assetmanager.SetApkAssets({style_assets_.get()});
+
+ // GetBag should stop traversing the parents of styles when a circular
+ // dependency is detected
+ const ResolvedBag* bag_one = assetmanager.GetBag(app::R::style::StyleFour);
+ ASSERT_NE(nullptr, bag_one);
+ ASSERT_EQ(3u, bag_one->entry_count);
+}
+
TEST_F(AssetManager2Test, ResolveReferenceToResource) {
AssetManager2 assetmanager;
assetmanager.SetApkAssets({basic_assets_.get()});