From 33af6c730f9f7fc51f04516c7a22cac82cb9823e Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Wed, 29 Mar 2017 13:00:35 -0700 Subject: AAPT2: Parse an ID encoded as a map ID types should not be encoded as a map. AAPT and AAPT2 emit IDs as boolean types. Some apps exist that for some reason have their ID types encoded as empty maps. This is the case only for the auto generated IDs from enum values in tags. Allow IDs as maps and ignore their content when processing an APK for optimizing. Also fixes an issue with expected size of the ResTable_package struct. Bug: 35861796 Test: tested against the APK in b/35861796 Change-Id: I29a19cd9777bb10bed6766cd42e35e50e098797b --- libs/androidfw/LoadedArsc.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libs/androidfw/LoadedArsc.cpp') diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp index 621d8c0e96f0..bd7b80469ddc 100644 --- a/libs/androidfw/LoadedArsc.cpp +++ b/libs/androidfw/LoadedArsc.cpp @@ -416,7 +416,9 @@ std::unique_ptr LoadedPackage::Load(const Chunk& chunk) { ATRACE_CALL(); std::unique_ptr loaded_package{new LoadedPackage()}; - const ResTable_package* header = chunk.header(); + constexpr size_t kMinPackageSize = + sizeof(ResTable_package) - sizeof(ResTable_package::typeIdOffset); + const ResTable_package* header = chunk.header(); if (header == nullptr) { LOG(ERROR) << "Chunk RES_TABLE_PACKAGE_TYPE is too small."; return {}; -- cgit v1.2.3-59-g8ed1b