From 2919ac8971727930d939aeccfc9a4e50ad6b9884 Mon Sep 17 00:00:00 2001 From: Esme-Yi Date: Fri, 6 Aug 2021 08:54:02 +0000 Subject: [PATCH] [llvm-readobj][XCOFF] Warn about invalid offset Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D107398 --- llvm/tools/llvm-readobj/ObjDumper.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/llvm/tools/llvm-readobj/ObjDumper.cpp b/llvm/tools/llvm-readobj/ObjDumper.cpp index 8cdbd95..dc4a303 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.cpp +++ b/llvm/tools/llvm-readobj/ObjDumper.cpp @@ -54,10 +54,16 @@ static void printAsPrintable(raw_ostream &W, const uint8_t *Start, size_t Len) { void ObjDumper::printAsStringList(StringRef StringContent, size_t StringDataOffset) { - if (StringContent.size() < StringDataOffset) { - reportUniqueWarning("error: offset is out of string contents"); + size_t StrSize = StringContent.size(); + if (StrSize == 0) + return; + if (StrSize < StringDataOffset) { + reportUniqueWarning("offset (0x" + Twine::utohexstr(StringDataOffset) + + ") is past the end of the contents (size 0x" + + Twine::utohexstr(StrSize) + ")"); return; } + const uint8_t *StrContent = StringContent.bytes_begin(); // Some formats contain additional metadata at the start which should not be // interpreted as strings. Skip these bytes, but account for them in the -- 2.7.4