]> granicus.if.org Git - llvm/commitdiff
Fix a bug in llvm-obdump(1) with the -objc-meta-data flag with -macho
authorKevin Enderby <enderby@apple.com>
Fri, 3 Feb 2017 18:22:04 +0000 (18:22 +0000)
committerKevin Enderby <enderby@apple.com>
Fri, 3 Feb 2017 18:22:04 +0000 (18:22 +0000)
which caused a hang on a malformed binary with bad bind info.

rdar://29672108

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294021 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry [new file with mode: 0644]
test/tools/llvm-objdump/X86/malformed-machos.test
tools/llvm-objdump/MachODump.cpp

diff --git a/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry b/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry
new file mode 100644 (file)
index 0000000..afdd083
Binary files /dev/null and b/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry differ
index 83ebfc4364e6870d6e7fe6fa35c692033fe1341f..0a9ac02f0eb0a91d6abce464a378360188b44ec1 100644 (file)
@@ -63,3 +63,6 @@ INVALID-SYMBOL-STRX-UNIVERSAL: macho-invalid-symbol-strx-universal' (for archite
 
 RUN: not llvm-objdump -macho -disassemble %p/Inputs/macho-invalid-symbol-lib_ordinal 2>&1 | FileCheck -check-prefix INVALID-SYMBOL-LIB_ORDINAL %s
 INVALID-SYMBOL-LIB_ORDINAL: macho-invalid-symbol-lib_ordinal': truncated or malformed object (bad library ordinal: 7 for symbol at index 2)
+
+RUN: llvm-objdump -macho -objc-meta-data %p/Inputs/macho-invalid-bind-entry | FileCheck -check-prefix INVALID-BIND-ENTRY %s
+INVALID-BIND-ENTRY: 0000000100020c90 0x2d0409887202e473
index b2e23f5032f7f9c12fea5925c2ca8f8ad4960fdd..e4ddf5457fb01e0ff6edca43408ad98801fd4475 100644 (file)
@@ -9579,7 +9579,7 @@ static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,
       uint32_t SegIndex = Entry.segmentIndex();
       uint64_t OffsetInSeg = Entry.segmentOffset();
       if (!sectionTable.isValidSegIndexAndOffset(SegIndex, OffsetInSeg))
-        continue;
+        return nullptr;
       uint64_t Address = sectionTable.address(SegIndex, OffsetInSeg);
       StringRef name = Entry.symbolName();
       if (!name.empty())