summaryrefslogtreecommitdiff
path: root/libs/androidfw/AssetManager2.cpp
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2018-03-30 16:13:53 -0700
committer Ryan Mitchell <rtmitchell@google.com> 2018-04-04 15:55:34 +0000
commit6759955c95442571a0eb0cf88872b5010c60aad4 (patch)
treec09b03c140c18c59e1b3a673994d8a7a75c55408 /libs/androidfw/AssetManager2.cpp
parenta926126a8bc89c1a6bd7fa8a76332476eba0d954 (diff)
Fixed resource bag retrieval infinite recursion.
An app was crashing because in an attempt to retrieve layout attribute/style data, the app infinitely recursed because its parent was set to itself. This change checks if the resource bag parent and child have the same ids, and if so, attempts to find the resource in this bag alone rather than attempting to also look in parent bags. Bug: 74493983 Test: Manual testing of Fitbit app Change-Id: Iea37533a0676bd51b72c9bb235adec9bd04f2ccc (cherry picked from commit ac04095ba91f262c9167985a8024607763d8cacc)
Diffstat (limited to 'libs/androidfw/AssetManager2.cpp')
-rw-r--r--libs/androidfw/AssetManager2.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp
index d9f1293183b7..5460b3b4c914 100644
--- a/libs/androidfw/AssetManager2.cpp
+++ b/libs/androidfw/AssetManager2.cpp
@@ -596,7 +596,7 @@ const ResolvedBag* AssetManager2::GetBag(uint32_t resid) {
const ResTable_map* const map_entry_end = map_entry + dtohl(map->count);
uint32_t parent_resid = dtohl(map->parent.ident);
- if (parent_resid == 0) {
+ if (parent_resid == 0 || parent_resid == resid) {
// There is no parent, meaning there is nothing to inherit and we can do a simple
// copy of the entries in the map.
const size_t entry_count = map_entry_end - map_entry;