From: Kevin Enderby Date: Fri, 3 Feb 2017 18:22:04 +0000 (+0000) Subject: Fix a bug in llvm-obdump(1) with the -objc-meta-data flag with -macho X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b6a21d04384490bb35ac31fb5c8c251230b73ce7;p=llvm Fix a bug in llvm-obdump(1) with the -objc-meta-data flag with -macho 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 --- 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 index 00000000000..afdd0838c91 Binary files /dev/null and b/test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry differ diff --git a/test/tools/llvm-objdump/X86/malformed-machos.test b/test/tools/llvm-objdump/X86/malformed-machos.test index 83ebfc4364e..0a9ac02f0eb 100644 --- a/test/tools/llvm-objdump/X86/malformed-machos.test +++ b/test/tools/llvm-objdump/X86/malformed-machos.test @@ -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 diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index b2e23f5032f..e4ddf5457fb 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -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())