summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Merger (Role) <noreply-android-build-merger@google.com> 2018-06-06 17:12:24 +0000
committer Android Build Merger (Role) <noreply-android-build-merger@google.com> 2018-06-06 17:12:24 +0000
commit6f76fbfc6933d756dcbaaa6088be00a5b4a42a40 (patch)
tree066fd4adddbe3ff8010b4944704d1bcbe50cabac
parenta16b03c540bde9a9922f45030e48818be5cdce8f (diff)
parent09386896063ff36df61a8bb47e8ffe3ca1b1f015 (diff)
[automerger] Fix DynamicRefTable::load security bug am: 8cf0f988b0 am: d65dbf91ce am: aeb2fc64d9 am: 0938689606
Change-Id: Ib9e372290f9b2e1fa73470db3f7fd67bc9190711
-rw-r--r--libs/androidfw/ResourceTypes.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index f608d7bf0681..a51b165db11c 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -6415,8 +6415,16 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg,
}
} else if (ctype == RES_TABLE_LIBRARY_TYPE) {
+
if (group->dynamicRefTable.entries().size() == 0) {
- status_t err = group->dynamicRefTable.load((const ResTable_lib_header*) chunk);
+ const ResTable_lib_header* lib = (const ResTable_lib_header*) chunk;
+ status_t err = validate_chunk(&lib->header, sizeof(*lib),
+ endPos, "ResTable_lib_header");
+ if (err != NO_ERROR) {
+ return (mError=err);
+ }
+
+ err = group->dynamicRefTable.load(lib);
if (err != NO_ERROR) {
return (mError=err);
}