From e9f9027c3c07ecdfad1ab900c0a62e0e320d5dd1 Mon Sep 17 00:00:00 2001 From: Alexander Shaposhnikov Date: Fri, 18 Sep 2020 17:50:08 -0700 Subject: [PATCH] [llvm-install-name-tool] Validate -id value early The code which validates the value of -id is moved into the function parseInstallNameToolOptions. Test plan: make check-all Differential revision: https://reviews.llvm.org/D87855 --- llvm/tools/llvm-objcopy/CopyConfig.cpp | 9 ++++++--- llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp | 10 +++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/llvm/tools/llvm-objcopy/CopyConfig.cpp b/llvm/tools/llvm-objcopy/CopyConfig.cpp index 1fde54d..63e672e 100644 --- a/llvm/tools/llvm-objcopy/CopyConfig.cpp +++ b/llvm/tools/llvm-objcopy/CopyConfig.cpp @@ -902,12 +902,15 @@ parseInstallNameToolOptions(ArrayRef ArgsArr) { Config.RPathsToUpdate.insert({Old, New}); } - if (auto *Arg = InputArgs.getLastArg(INSTALL_NAME_TOOL_id)) + if (auto *Arg = InputArgs.getLastArg(INSTALL_NAME_TOOL_id)) { Config.SharedLibId = Arg->getValue(); + if (Config.SharedLibId->empty()) + return createStringError(errc::invalid_argument, + "cannot specify an empty id"); + } - for (auto *Arg : InputArgs.filtered(INSTALL_NAME_TOOL_change)) { + for (auto *Arg : InputArgs.filtered(INSTALL_NAME_TOOL_change)) Config.InstallNamesToUpdate.insert({Arg->getValue(0), Arg->getValue(1)}); - } SmallVector Positional; for (auto Arg : InputArgs.filtered(INSTALL_NAME_TOOL_UNKNOWN)) diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp index 68cbdbb..de372ac 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -181,13 +181,9 @@ static Error processLoadCommands(const CopyConfig &Config, Object &Obj) { for (LoadCommand &LC : Obj.LoadCommands) { switch (LC.MachOLoadCommand.load_command_data.cmd) { case MachO::LC_ID_DYLIB: - if (Config.SharedLibId) { - StringRef Id = Config.SharedLibId.getValue(); - if (Id.empty()) - return createStringError(errc::invalid_argument, - "cannot specify an empty id"); - updateLoadCommandPayloadString(LC, Id); - } + if (Config.SharedLibId) + updateLoadCommandPayloadString( + LC, *Config.SharedLibId); break; case MachO::LC_RPATH: { -- 2.7.4