From 74ecc89c464a858f261ec279dd202dfafa476d7d Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Fri, 19 Jun 2015 22:40:05 +0000 Subject: [PATCH] COFF: Take reference to argument vector using std::vector::data() instead of operator[](0). This avoids undefined behaviour caused by an out-of-range access if the vector is empty, which can happen if an object file's directive section contains only whitespace. llvm-svn: 240183 --- lld/COFF/DriverUtils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index 7328606c64d5..129b1b43cbf5 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -557,7 +557,7 @@ ArgParser::parse(std::vector Argv) { unsigned MissingIndex; unsigned MissingCount; std::unique_ptr Args(Table.ParseArgs( - &Argv[0], &Argv[0] + Argv.size(), MissingIndex, MissingCount)); + Argv.data(), Argv.data() + Argv.size(), MissingIndex, MissingCount)); if (MissingCount) { llvm::errs() << "missing arg value for \"" << Args->getArgString(MissingIndex) @@ -587,7 +587,7 @@ std::vector ArgParser::tokenize(StringRef S) { // character. '@' is replaced by the file's contents. ErrorOr> ArgParser::replaceResponseFiles(std::vector Argv) { - SmallVector Tokens(&Argv[0], &Argv[0] + Argv.size()); + SmallVector Tokens(Argv.data(), Argv.data() + Argv.size()); BumpPtrStringSaver Saver(AllocAux); ExpandResponseFiles(Saver, TokenizeWindowsCommandLine, Tokens); return std::vector(Tokens.begin(), Tokens.end()); -- 2.34.1