Merge pull request #103 from haberman/dwarf-form

Fixed hang found by fuzzing.
diff --git a/src/macho.cc b/src/macho.cc
index 6036af3..a027952 100644
--- a/src/macho.cc
+++ b/src/macho.cc
@@ -125,6 +125,14 @@
 
   for (uint32_t i = 0; i < ncmds; i++) {
     auto command = GetStructPointer<load_command>(header_data);
+
+    // We test for this because otherwise a large ncmds can make bloaty hang for
+    // a while, even on a small file.  Hopefully there are no real cases where a
+    // zero-size loadcmd exists.
+    if (command->cmdsize == 0) {
+      THROW("Mach-O load command had zero size.");
+    }
+
     string_view command_data = StrictSubstr(header_data, 0, command->cmdsize);
     std::forward<Func>(loadcmd_func)(command->cmd, command_data, macho_data);
     MaybeAddOverhead(overhead_sink, "[Mach-O Headers]", command_data);
diff --git a/tests/testdata/fuzz_corpus/6ecf640685258c2bc0960ab1a797ba2db10ffd63 b/tests/testdata/fuzz_corpus/6ecf640685258c2bc0960ab1a797ba2db10ffd63
new file mode 100644
index 0000000..3841a59
--- /dev/null
+++ b/tests/testdata/fuzz_corpus/6ecf640685258c2bc0960ab1a797ba2db10ffd63
Binary files differ