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
This commit is contained in:
Peter Collingbourne 2015-06-19 22:40:05 +00:00
parent f00df0af2d
commit 74ecc89c46
1 changed files with 2 additions and 2 deletions

View File

@ -557,7 +557,7 @@ ArgParser::parse(std::vector<const char *> Argv) {
unsigned MissingIndex;
unsigned MissingCount;
std::unique_ptr<llvm::opt::InputArgList> 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<const char *> ArgParser::tokenize(StringRef S) {
// character. '@<filename>' is replaced by the file's contents.
ErrorOr<std::vector<const char *>>
ArgParser::replaceResponseFiles(std::vector<const char *> Argv) {
SmallVector<const char *, 256> Tokens(&Argv[0], &Argv[0] + Argv.size());
SmallVector<const char *, 256> Tokens(Argv.data(), Argv.data() + Argv.size());
BumpPtrStringSaver Saver(AllocAux);
ExpandResponseFiles(Saver, TokenizeWindowsCommandLine, Tokens);
return std::vector<const char *>(Tokens.begin(), Tokens.end());