summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp3
-rw-r--r--llvm/test/Object/macho-invalid.test8
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp7
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);
OpenPOWER on IntegriCloud