[llvm-readobj][XCOFF] Warn about invalid offset
authorEsme-Yi <esme.yi@ibm.com>
Fri, 6 Aug 2021 08:54:02 +0000 (08:54 +0000)
committerEsme-Yi <esme.yi@ibm.com>
Fri, 6 Aug 2021 08:54:02 +0000 (08:54 +0000)
Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D107398

llvm/tools/llvm-readobj/ObjDumper.cpp

index 8cdbd95..dc4a303 100644 (file)
@@ -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