diff options
author | y <rtmitchell@google.com> | 2018-04-12 14:26:23 -0700 |
---|---|---|
committer | y <rtmitchell@google.com> | 2018-04-13 08:50:09 -0700 |
commit | 57cd195c4303ff248c6e016d51e3b7632cf69bae (patch) | |
tree | 301a7bf02888ac353e661792bfde9a4dd04273d6 /libs/androidfw/tests/AssetManager2_test.cpp | |
parent | 65317bac02e993d1313a1958a8497ff5f2a2ecd5 (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.cpp | 11 |
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()}); |