From b6a21d04384490bb35ac31fb5c8c251230b73ce7 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Fri, 3 Feb 2017 18:22:04 +0000 Subject: [PATCH] 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 --- .../X86/Inputs/macho-invalid-bind-entry | Bin 0 -> 3448 bytes .../tools/llvm-objdump/X86/malformed-machos.test | 3 +++ tools/llvm-objdump/MachODump.cpp | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 test/tools/llvm-objdump/X86/Inputs/macho-invalid-bind-entry 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 0000000000000000000000000000000000000000..afdd0838c911bdee331f518dc069d9e5bdffa73f GIT binary patch literal 3448 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 literal 0 HcmV?d00001 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()) -- 2.50.1