diff options
author | Alex Brachet <alexbrachetmialot@gmail.com> | 2019-06-15 05:32:23 +0000 |
---|---|---|
committer | Alex Brachet <alexbrachetmialot@gmail.com> | 2019-06-15 05:32:23 +0000 |
commit | 899a3072f0930e3b5de853e886b92b409f6702a4 (patch) | |
tree | 98a1ebd229e7bf9e31d6ab4a9728c047278e174b /llvm/tools/llvm-objcopy/CopyConfig.cpp | |
parent | ad6bb86b2dc0bd4fb7622b3aa5967f019b90992d (diff) | |
download | llvm-899a3072f0930e3b5de853e886b92b409f6702a4.zip llvm-899a3072f0930e3b5de853e886b92b409f6702a4.tar.gz llvm-899a3072f0930e3b5de853e886b92b409f6702a4.tar.bz2 |
[objcopy] Error when --preserve-dates is specified with standard streams
Summary: llvm-objcopy/strip now error when -p is specified when reading from stdin or writing to stdout
Reviewers: jhenderson, rupprecht, espindola, alexshap
Reviewed By: jhenderson, rupprecht
Subscribers: emaste, arichardson, jakehehrlich, MaskRay, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63090
llvm-svn: 363485
Diffstat (limited to 'llvm/tools/llvm-objcopy/CopyConfig.cpp')
-rw-r--r-- | llvm/tools/llvm-objcopy/CopyConfig.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/tools/llvm-objcopy/CopyConfig.cpp b/llvm/tools/llvm-objcopy/CopyConfig.cpp index 9f03c7c..f379f1a 100644 --- a/llvm/tools/llvm-objcopy/CopyConfig.cpp +++ b/llvm/tools/llvm-objcopy/CopyConfig.cpp @@ -668,6 +668,11 @@ Expected<DriverConfig> parseObjcopyOptions(ArrayRef<const char *> ArgsArr) { Config.PreserveDates = InputArgs.hasArg(OBJCOPY_preserve_dates); + if (Config.PreserveDates && + (Config.OutputFilename == "-" || Config.InputFilename == "-")) + return createStringError(errc::invalid_argument, + "--preserve-dates requires a file"); + for (auto Arg : InputArgs) if (Arg->getOption().matches(OBJCOPY_set_start)) { auto EAddr = getAsInteger<uint64_t>(Arg->getValue()); @@ -736,7 +741,7 @@ Expected<DriverConfig> parseStripOptions(ArrayRef<const char *> ArgsArr) { exit(0); } - SmallVector<const char *, 2> Positional; + SmallVector<StringRef, 2> Positional; for (auto Arg : InputArgs.filtered(STRIP_UNKNOWN)) return createStringError(errc::invalid_argument, "unknown argument '%s'", Arg->getAsString(InputArgs).c_str()); @@ -801,13 +806,18 @@ Expected<DriverConfig> parseStripOptions(ArrayRef<const char *> ArgsArr) { InputArgs.getLastArgValue(STRIP_output, Positional[0]); DC.CopyConfigs.push_back(std::move(Config)); } else { - for (const char *Filename : Positional) { + for (StringRef Filename : Positional) { Config.InputFilename = Filename; Config.OutputFilename = Filename; DC.CopyConfigs.push_back(Config); } } + if (Config.PreserveDates && (is_contained(Positional, "-") || + InputArgs.getLastArgValue(STRIP_output) == "-")) + return createStringError(errc::invalid_argument, + "--preserve-dates requires a file"); + return std::move(DC); } |