summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0001.machobin0 -> 9248 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0006.machobin0 -> 9248 bytes
-rw-r--r--llvm/test/tools/llvm-objdump/malformed-machos.test14
-rw-r--r--llvm/tools/llvm-objdump/MachODump.cpp6
4 files changed, 18 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0001.macho b/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0001.macho
new file mode 100644
index 00000000000..d81f9f00f4a
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0001.macho
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0006.macho b/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0006.macho
new file mode 100644
index 00000000000..13a4e9aea7f
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/Inputs/malformed-machos/mem-crup-0006.macho
Binary files differ
diff --git a/llvm/test/tools/llvm-objdump/malformed-machos.test b/llvm/test/tools/llvm-objdump/malformed-machos.test
new file mode 100644
index 00000000000..4e1765f7f42
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/malformed-machos.test
@@ -0,0 +1,14 @@
+// These test checks that llvm-objdump will not crash with malformed Mach-O
+// files. So the check line is not all that important but the bug fixes to
+// make sure llvm-objdump is robust is what matters.
+# RUN: llvm-objdump -macho -objc-meta-data \
+# RUN: %p/Inputs/malformed-machos/mem-crup-0001.macho \
+# RUN: | FileCheck -check-prefix=m0001 %s
+
+# m0001: (method_t extends past the end of the section)
+
+# RUN: llvm-objdump -macho -objc-meta-data \
+# RUN: %p/Inputs/malformed-machos/mem-crup-0006.macho \
+# RUN: | FileCheck -check-prefix=m0006 %s
+
+# m0006: ivarLayout 0x8
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp
index 164fb4ce4bc..0e9bf3695d8 100644
--- a/llvm/tools/llvm-objdump/MachODump.cpp
+++ b/llvm/tools/llvm-objdump/MachODump.cpp
@@ -3236,6 +3236,8 @@ walk_pointer_list_32(const char *listname, const SectionRef S,
}
static void print_layout_map(const char *layout_map, uint32_t left) {
+ if (layout_map == nullptr)
+ return;
outs() << " layout map: ";
do {
outs() << format("0x%02" PRIx32, (*layout_map) & 0xff) << " ";
@@ -3299,8 +3301,8 @@ static void print_method_list64_t(uint64_t p, struct DisassembleInfo *info,
return;
memset(&m, '\0', sizeof(struct method64_t));
if (left < sizeof(struct method64_t)) {
- memcpy(&ml, r, left);
- outs() << indent << " (method_t entends past the end of the section)\n";
+ memcpy(&m, r, left);
+ outs() << indent << " (method_t extends past the end of the section)\n";
} else
memcpy(&m, r, sizeof(struct method64_t));
if (info->O->isLittleEndian() != sys::IsLittleEndianHost)
OpenPOWER on IntegriCloud