[llvm-nm] Fix crash when running with --print-armap on corrupt archives.
authorJordan Rupprecht <rupprecht@google.com>
Thu, 11 Oct 2018 17:55:11 +0000 (17:55 +0000)
committerJordan Rupprecht <rupprecht@google.com>
Thu, 11 Oct 2018 17:55:11 +0000 (17:55 +0000)
error() in llvm-nm intentionally does not return so that the callee can move on to future files/slices. When printing the archive map, this is not currently handled (the caller assumes that error() returns), so processing continues despite there being an error.

Also, change one return to a break, so that symbols can be printed even if the archive map is corrupt.

llvm-svn: 344268

llvm/tools/llvm-nm/llvm-nm.cpp

index 22fdd4c..7e257d8 100644 (file)
@@ -1755,12 +1755,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
         outs() << "Archive map\n";
         for (; I != E; ++I) {
           Expected<Archive::Child> C = I->getMember();
-          if (!C)
+          if (!C) {
             error(C.takeError(), Filename);
+            break;
+          }
           Expected<StringRef> FileNameOrErr = C->getName();
           if (!FileNameOrErr) {
             error(FileNameOrErr.takeError(), Filename);
-            return;
+            break;
           }
           StringRef SymName = I->getName();
           outs() << SymName << " in " << FileNameOrErr.get() << "\n";