[lld] r263569 - ELF: Fix use-after-free problem.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 15 11:20:50 PDT 2016
Author: ruiu
Date: Tue Mar 15 13:20:50 2016
New Revision: 263569
URL: http://llvm.org/viewvc/llvm-project?rev=263569&view=rev
Log:
ELF: Fix use-after-free problem.
Fixes pr26908. This patch is based on Filipe Cabecinhas'
patch (http://reviews.llvm.org/D18167)
http://reviews.llvm.org/D18169
Modified:
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Driver.h
lld/trunk/ELF/DriverUtils.cpp
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=263569&r1=263568&r2=263569&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Tue Mar 15 13:20:50 2016
@@ -170,7 +170,8 @@ static bool hasZOption(opt::InputArgList
}
void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
- opt::InputArgList Args = parseArgs(&Alloc, ArgsArr.slice(1));
+ ELFOptTable Parser;
+ opt::InputArgList Args = Parser.parse(ArgsArr.slice(1));
if (Args.hasArg(OPT_help)) {
printHelp(ArgsArr[0]);
return;
Modified: lld/trunk/ELF/Driver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.h?rev=263569&r1=263568&r2=263569&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.h (original)
+++ lld/trunk/ELF/Driver.h Tue Mar 15 13:20:50 2016
@@ -39,8 +39,14 @@ private:
};
// Parses command line options.
-llvm::opt::InputArgList parseArgs(llvm::BumpPtrAllocator *A,
- ArrayRef<const char *> Args);
+class ELFOptTable : public llvm::opt::OptTable {
+public:
+ ELFOptTable();
+ llvm::opt::InputArgList parse(ArrayRef<const char *> Argv);
+
+private:
+ llvm::BumpPtrAllocator Alloc;
+};
// Create enum with OPT_xxx values for each option in Options.td
enum {
Modified: lld/trunk/ELF/DriverUtils.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/DriverUtils.cpp?rev=263569&r1=263568&r2=263569&view=diff
==============================================================================
--- lld/trunk/ELF/DriverUtils.cpp (original)
+++ lld/trunk/ELF/DriverUtils.cpp Tue Mar 15 13:20:50 2016
@@ -46,26 +46,21 @@ static const opt::OptTable::Info infoTab
#undef OPTION
};
-class ELFOptTable : public opt::OptTable {
-public:
- ELFOptTable() : OptTable(infoTable) {}
-};
+ELFOptTable::ELFOptTable() : OptTable(infoTable) {}
// Parses a given list of options.
-opt::InputArgList elf::parseArgs(llvm::BumpPtrAllocator *A,
- ArrayRef<const char *> Argv) {
+opt::InputArgList ELFOptTable::parse(ArrayRef<const char *> Argv) {
// Make InputArgList from string vectors.
- ELFOptTable Table;
unsigned MissingIndex;
unsigned MissingCount;
// Expand response files. '@<filename>' is replaced by the file's contents.
SmallVector<const char *, 256> Vec(Argv.data(), Argv.data() + Argv.size());
- StringSaver Saver(*A);
+ StringSaver Saver(Alloc);
llvm::cl::ExpandResponseFiles(Saver, llvm::cl::TokenizeGNUCommandLine, Vec);
// Parse options and then do error checking.
- opt::InputArgList Args = Table.ParseArgs(Vec, MissingIndex, MissingCount);
+ opt::InputArgList Args = this->ParseArgs(Vec, MissingIndex, MissingCount);
if (MissingCount)
error(Twine("missing arg value for \"") + Args.getArgString(MissingIndex) +
"\", expected " + Twine(MissingCount) +
More information about the llvm-commits
mailing list