From e71e13c7d612c328042682f46144e04d740d271f Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Wed, 21 Sep 2016 20:03:09 +0000 Subject: [PATCH] =?utf8?q?Next=20set=20of=20additional=20error=20checks=20?= =?utf8?q?for=20invalid=20Mach-O=20files=20for=20bad=20LC=5FUUID=20load=20?= =?utf8?q?commands.=20=20Added=20a=20missing=20check=20and=20made=20the=20?= =?utf8?q?check=20for=20more=20than=20one=20like=20other=20other=20?= =?utf8?q?=E2=80=9Cmore=20than=20one=E2=80=9D=20checks.=20=20And=20of=20co?= =?utf8?q?urse=20added=20test=20cases.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit llvm-svn: 282104 --- llvm/lib/Object/MachOObjectFile.cpp | 8 ++++++-- llvm/test/Object/Inputs/macho-invalid-uuid-bad-size | Bin 0 -> 48 bytes llvm/test/Object/Inputs/macho-invalid-uuid-more-than-one | Bin 0 -> 76 bytes llvm/test/Object/macho-invalid.test | 6 ++++++ 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 llvm/test/Object/Inputs/macho-invalid-uuid-bad-size create mode 100644 llvm/test/Object/Inputs/macho-invalid-uuid-more-than-one diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index 1592e49..da5a313 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -717,9 +717,13 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian, "LC_DYLD_INFO_ONLY"))) return; } else if (Load.C.cmd == MachO::LC_UUID) { - // Multiple UUID load commands + if (Load.C.cmdsize != sizeof(MachO::uuid_command)) { + Err = malformedError("LC_UUID command " + Twine(I) + " has incorrect " + "cmdsize"); + return; + } if (UuidLoadCmd) { - Err = malformedError("Multiple UUID load commands"); + Err = malformedError("more than one LC_UUID command"); return; } UuidLoadCmd = Load.Ptr; diff --git a/llvm/test/Object/Inputs/macho-invalid-uuid-bad-size b/llvm/test/Object/Inputs/macho-invalid-uuid-bad-size new file mode 100644 index 0000000000000000000000000000000000000000..6e7351e76b329c1c04270f611675b7ab8e3a2230 GIT binary patch literal 48 gcmX^2>+L^w1_lOZAZCPO5g-i$(m)Jjg9U&D0JClc0{{R3 literal 0 HcmV?d00001 diff --git a/llvm/test/Object/Inputs/macho-invalid-uuid-more-than-one b/llvm/test/Object/Inputs/macho-invalid-uuid-more-than-one new file mode 100644 index 0000000000000000000000000000000000000000..5427811a9a408715b86fa0f4594472a72ecb2ad8 GIT binary patch literal 76 kcmX^2>+L^w1_lOZAZ7$&CLlHdVi1r9VhJz{mB1wq053%ZR{#J2 literal 0 HcmV?d00001 diff --git a/llvm/test/Object/macho-invalid.test b/llvm/test/Object/macho-invalid.test index b8a1e10..64899d7 100644 --- a/llvm/test/Object/macho-invalid.test +++ b/llvm/test/Object/macho-invalid.test @@ -283,3 +283,9 @@ INVALID-DYLIB-WRONG-FILETYPE: macho-invalid-dylib-wrong-filetype': truncated or RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho-invalid-dylib-no-id 2>&1 | FileCheck -check-prefix INVALID-DYLIB-NO-ID %s INVALID-DYLIB-NO-ID: macho-invalid-dylib-no-id': truncated or malformed object (no LC_ID_DYLIB load command in dynamic library filetype) + +RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho-invalid-uuid-more-than-one 2>&1 | FileCheck -check-prefix INVALID-UUID-MORE-THAN-ONE %s +INVALID-UUID-MORE-THAN-ONE: macho-invalid-uuid-more-than-one': truncated or malformed object (more than one LC_UUID command) + +RUN: not llvm-objdump -macho -private-headers %p/Inputs/macho-invalid-uuid-bad-size 2>&1 | FileCheck -check-prefix INVALID-UUID-BAD-SIZE %s +INVALID-UUID-BAD-SIZE: macho-invalid-uuid-bad-size': truncated or malformed object (LC_UUID command 0 has incorrect cmdsize) -- 2.7.4