summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2018-06-06 23:33:08 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-06-06 23:33:08 +0000
commit448b5656625d27da0003e5eef39b5801b2eebcb6 (patch)
treee628f1b57681593110d517a331fe77d3d3d522a0
parentb87a87b8a9c7a41fd52ff08674b5e6af5e867194 (diff)
parent8cf0f988b0c64bcf2c199bb76439c51c257dd162 (diff)
Merge "Fix DynamicRefTable::load security bug" into mnc-dev
-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 428180b6a828..3a215d4adde2 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -6220,8 +6220,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);
}