Check value in dump before printing

For applications that remove the names of resources from the string
pool, check that the attribute has a name before attempting to print it.

Test: manual
Bug: 130553900
Change-Id: I05e5d59f01b2c02c8a024d06fd896074d6bf465b
This commit is contained in:
Ryan Mitchell
2019-04-15 16:47:58 -07:00
parent 4886935329
commit 0c0cedff00

View File

@@ -129,12 +129,20 @@ class ValueBodyPrinter : public ConstValueVisitor {
constexpr uint32_t kMask = android::ResTable_map::TYPE_ENUM | android::ResTable_map::TYPE_FLAGS;
if (attr->type_mask & kMask) {
for (const auto& symbol : attr->symbols) {
printer_->Print(symbol.symbol.name.value().entry);
if (symbol.symbol.id) {
printer_->Print("(");
if (symbol.symbol.name) {
printer_->Print(symbol.symbol.name.value().entry);
if (symbol.symbol.id) {
printer_->Print("(");
printer_->Print(symbol.symbol.id.value().to_string());
printer_->Print(")");
}
} else if (symbol.symbol.id) {
printer_->Print(symbol.symbol.id.value().to_string());
printer_->Print(")");
} else {
printer_->Print("???");
}
printer_->Println(StringPrintf("=0x%08x", symbol.value));
}
}