OSDN Git Service

[SymbolDumper] Validate the string table offset before using it
authorDavid Majnemer <david.majnemer@gmail.com>
Sat, 28 May 2016 19:45:56 +0000 (19:45 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Sat, 28 May 2016 19:45:56 +0000 (19:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271142 91177308-0d34-0410-b5e6-96231b3b80d8

lib/DebugInfo/CodeView/SymbolDumper.cpp

index e2dc9d5..4afcdf1 100644 (file)
@@ -610,11 +610,12 @@ void CVSymbolDumperImpl::visitDefRangeSym(SymbolKind Kind,
 
   if (ObjDelegate) {
     StringRef StringTable = ObjDelegate->getStringTable();
-    if (!StringTable.empty()) {
-      W.printString(
-          "Program",
-          StringTable.drop_front(DefRange.Header.Program).split('\0').first);
-    }
+    auto ProgramStringTableOffset = DefRange.Header.Program;
+    if (ProgramStringTableOffset >= StringTable.size())
+      return parseError();
+    StringRef Program =
+        StringTable.drop_front(ProgramStringTableOffset).split('\0').first;
+    W.printString("Program", Program);
   }
   printLocalVariableAddrRange(DefRange.Header.Range,
                               DefRange.getRelocationOffset());