[llvm-readobj] Validate the string table offset before using it

llvm-svn: 271139
This commit is contained in:
David Majnemer 2016-05-28 19:45:49 +00:00
parent 442b88b9ec
commit a6d93fd73b
1 changed files with 8 additions and 2 deletions

View File

@ -794,14 +794,20 @@ void COFFDumper::printCodeViewSymbolSection(StringRef SectionName,
while (!Contents.empty()) {
const FrameData *FD;
error(consumeObject(Contents, FD));
if (FD->FrameFunc >= CVStringTable.size())
error(object_error::parse_failed);
StringRef FrameFunc =
CVStringTable.drop_front(FD->FrameFunc).split('\0').first;
DictScope S(W, "FrameData");
W.printHex("RvaStart", FD->RvaStart);
W.printHex("CodeSize", FD->CodeSize);
W.printHex("LocalSize", FD->LocalSize);
W.printHex("ParamsSize", FD->ParamsSize);
W.printHex("MaxStackSize", FD->MaxStackSize);
W.printString("FrameFunc",
CVStringTable.drop_front(FD->FrameFunc).split('\0').first);
W.printString("FrameFunc", FrameFunc);
W.printHex("PrologSize", FD->PrologSize);
W.printHex("SavedRegsSize", FD->SavedRegsSize);
W.printFlags("Flags", FD->Flags, makeArrayRef(FrameDataFlags));