From 47bb456b2ffd774990a6aca45f6b90183e2075c3 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Fri, 12 Nov 2021 17:24:26 -0800 Subject: [PATCH] [llvm-obcopy][MachO] Add error for MH_PRELOAD Previously this would crash. Fixes https://bugs.llvm.org/show_bug.cgi?id=51877 Differential Revision: https://reviews.llvm.org/D113819 --- .../tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml | 16 ++++++++++++++++ llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp | 5 +++++ 2 files changed, 21 insertions(+) create mode 100644 llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml diff --git a/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml b/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml new file mode 100644 index 0000000..9b195f3 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/mh-preload-unsupported.yaml @@ -0,0 +1,16 @@ +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x100000C + cpusubtype: 0x0 + filetype: 0x5 + ncmds: 0 + sizeofcmds: 0 + flags: 0x1 + reserved: 0x0 +... + +# RUN: yaml2obj %s > %t +# RUN: not llvm-objcopy %t 2>&1 | FileCheck %s -DFILE=%t +# +# CHECK: error: [[FILE]]: MH_PRELOAD files are not supported diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp index ee15a23..9e7b91d 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -389,6 +389,11 @@ Error objcopy::macho::executeObjcopyOnBinary(const CommonConfig &Config, if (!O) return createFileError(Config.InputFilename, O.takeError()); + if (O->get()->Header.FileType == MachO::HeaderFileType::MH_PRELOAD) + return createStringError(std::errc::not_supported, + "%s: MH_PRELOAD files are not supported", + Config.InputFilename.str().c_str()); + if (Error E = handleArgs(Config, MachOConfig, **O)) return createFileError(Config.InputFilename, std::move(E)); -- 2.7.4