Revert "libandroidfw hardening for IncFs"
Revert "Move map_ptr to incfs namspace"
Revert submission 12787270
Reason for revert: b/173250495
Reverted Changes:
I5cd1bc8a2:libandroidfw hardening for IncFs
Ice5dbcfb2:Move map_ptr to incfs namspace
I29ccdc8ed:Do not cache bag parent stack until requested
I1e9e9acaa:Cache resolved theme values
Change-Id: Ib90ef68339710086df41e9abe0833a542d03a74f
diff --git a/tools/aapt2/process/SymbolTable.cpp b/tools/aapt2/process/SymbolTable.cpp
index ad716c7..897fa80 100644
--- a/tools/aapt2/process/SymbolTable.cpp
+++ b/tools/aapt2/process/SymbolTable.cpp
@@ -265,22 +265,21 @@
static std::unique_ptr<SymbolTable::Symbol> LookupAttributeInTable(
android::AssetManager2& am, ResourceId id) {
- using namespace android;
if (am.GetApkAssets().empty()) {
return {};
}
- auto bag_result = am.GetBag(id.id);
- if (!bag_result.has_value()) {
+ const android::ResolvedBag* bag = am.GetBag(id.id);
+ if (bag == nullptr) {
return nullptr;
}
// We found a resource.
std::unique_ptr<SymbolTable::Symbol> s = util::make_unique<SymbolTable::Symbol>(id);
- const ResolvedBag* bag = *bag_result;
+
const size_t count = bag->entry_count;
for (uint32_t i = 0; i < count; i++) {
- if (bag->entries[i].key == ResTable_map::ATTR_TYPE) {
+ if (bag->entries[i].key == android::ResTable_map::ATTR_TYPE) {
s->attribute = std::make_shared<Attribute>(bag->entries[i].value.data);
break;
}
@@ -288,25 +287,25 @@
if (s->attribute) {
for (size_t i = 0; i < count; i++) {
- const ResolvedBag::Entry& map_entry = bag->entries[i];
+ const android::ResolvedBag::Entry& map_entry = bag->entries[i];
if (Res_INTERNALID(map_entry.key)) {
switch (map_entry.key) {
- case ResTable_map::ATTR_MIN:
+ case android::ResTable_map::ATTR_MIN:
s->attribute->min_int = static_cast<int32_t>(map_entry.value.data);
break;
- case ResTable_map::ATTR_MAX:
+ case android::ResTable_map::ATTR_MAX:
s->attribute->max_int = static_cast<int32_t>(map_entry.value.data);
break;
}
continue;
}
- auto name = am.GetResourceName(map_entry.key);
- if (!name.has_value()) {
+ android::AssetManager2::ResourceName name;
+ if (!am.GetResourceName(map_entry.key, &name)) {
return nullptr;
}
- Maybe<ResourceName> parsed_name = ResourceUtils::ToResourceName(*name);
+ Maybe<ResourceName> parsed_name = ResourceUtils::ToResourceName(name);
if (!parsed_name) {
return nullptr;
}
@@ -329,7 +328,7 @@
bool found = false;
ResourceId res_id = 0;
- uint32_t type_spec_flags = 0;
+ uint32_t type_spec_flags;
ResourceName real_name;
// There can be mangled resources embedded within other packages. Here we will
@@ -341,19 +340,8 @@
real_name.package = package_name;
}
- auto real_res_id = asset_manager_.GetResourceId(real_name.to_string());
- if (!real_res_id.has_value()) {
- return true;
- }
-
- res_id.id = *real_res_id;
- if (!res_id.is_valid_static()) {
- return true;
- }
-
- auto value = asset_manager_.GetResource(res_id.id, true /* may_be_bag */);
- if (value.has_value()) {
- type_spec_flags = value->flags;
+ res_id = asset_manager_.GetResourceId(real_name.to_string());
+ if (res_id.is_valid_static() && asset_manager_.GetResourceFlags(res_id.id, &type_spec_flags)) {
found = true;
return false;
}
@@ -383,11 +371,11 @@
static Maybe<ResourceName> GetResourceName(android::AssetManager2& am,
ResourceId id) {
- auto name = am.GetResourceName(id.id);
- if (!name.has_value()) {
+ android::AssetManager2::ResourceName name;
+ if (!am.GetResourceName(id.id, &name)) {
return {};
}
- return ResourceUtils::ToResourceName(*name);
+ return ResourceUtils::ToResourceName(name);
}
std::unique_ptr<SymbolTable::Symbol> AssetManagerSymbolSource::FindById(
@@ -406,8 +394,9 @@
return {};
}
- auto value = asset_manager_.GetResource(id.id, true /* may_be_bag */);
- if (!value.has_value()) {
+
+ uint32_t type_spec_flags = 0;
+ if (!asset_manager_.GetResourceFlags(id.id, &type_spec_flags)) {
return {};
}
@@ -422,7 +411,7 @@
}
if (s) {
- s->is_public = (value->flags & android::ResTable_typeSpec::SPEC_PUBLIC) != 0;
+ s->is_public = (type_spec_flags & android::ResTable_typeSpec::SPEC_PUBLIC) != 0;
return s;
}
return {};