diff options
| author | 2018-06-06 23:33:08 +0000 | |
|---|---|---|
| committer | 2018-06-06 23:33:08 +0000 | |
| commit | 448b5656625d27da0003e5eef39b5801b2eebcb6 (patch) | |
| tree | e628f1b57681593110d517a331fe77d3d3d522a0 | |
| parent | b87a87b8a9c7a41fd52ff08674b5e6af5e867194 (diff) | |
| parent | 8cf0f988b0c64bcf2c199bb76439c51c257dd162 (diff) | |
Merge "Fix DynamicRefTable::load security bug" into mnc-dev
| -rw-r--r-- | libs/androidfw/ResourceTypes.cpp | 10 |
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); } |