diff options
-rw-r--r-- | llvm/lib/Object/MachOObjectFile.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Object/macho-invalid.test | 8 | ||||
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 7 |
3 files changed, 13 insertions, 5 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index 4ba6523a528..3fb8e537fad 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -332,8 +332,7 @@ ErrorOr<StringRef> MachOObjectFile::getSymbolName(DataRefImpl Symb) const { MachO::nlist_base Entry = getSymbolTableEntryBase(this, Symb); const char *Start = &StringTable.data()[Entry.n_strx]; if (Start < getData().begin() || Start >= getData().end()) - report_fatal_error( - "Symbol name entry points before beginning or past end of file."); + return object_error::parse_failed; return StringRef(Start); } diff --git a/llvm/test/Object/macho-invalid.test b/llvm/test/Object/macho-invalid.test index 686e516f5e9..0cf264f8771 100644 --- a/llvm/test/Object/macho-invalid.test +++ b/llvm/test/Object/macho-invalid.test @@ -29,7 +29,13 @@ BAD-SYMBOL: Requested symbol index is out of range RUN: not llvm-objdump -t %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \ RUN: | FileCheck -check-prefix NAME-PAST-EOF %s -NAME-PAST-EOF: Symbol name entry points before beginning or past end of file +NAME-PAST-EOF: error reading file: Invalid data was encountered while parsing the file. +RUN: llvm-nm -pa %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \ +RUN: | FileCheck -check-prefix NAME-PAST-EOF-nm-pa %s +NAME-PAST-EOF-nm-pa: 0000000000000000 - 00 0000 SO bad string index +RUN: llvm-nm -pax %p/Inputs/macho-invalid-symbol-name-past-eof 2>&1 \ +RUN: | FileCheck -check-prefix NAME-PAST-EOF-nm-pax %s +NAME-PAST-EOF-nm-pax: 0000000000000000 64 00 0000 fe000002 bad string index RUN: llvm-nm %p/Inputs/macho-invalid-section-index-getSectionRawName 2>&1 \ RUN: | FileCheck -check-prefix INVALID-SECTION-IDX-SYMBOL-SEC %s diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index b70a79c334c..20f080986da 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -960,8 +960,11 @@ static void dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, S.Address = *AddressOrErr; } S.TypeChar = getNMTypeChar(Obj, Sym); - if (error(Sym.printName(OS))) - break; + std::error_code EC = Sym.printName(OS); + if (EC && MachO) + OS << "bad string index"; + else + error(EC); OS << '\0'; S.Sym = Sym; SymbolList.push_back(S); |