[llvm] r271748 - [llvm-profdata] Fix use-after-free from discarded MemoryBuffer (NFC)
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 3 16:12:38 PDT 2016
Author: vedantk
Date: Fri Jun 3 18:12:38 2016
New Revision: 271748
URL: http://llvm.org/viewvc/llvm-project?rev=271748&view=rev
Log:
[llvm-profdata] Fix use-after-free from discarded MemoryBuffer (NFC)
Thanks to Justin Bogner for pointing this out!
Caught by ASAN.
Modified:
llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=271748&r1=271747&r2=271748&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
+++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Fri Jun 3 18:12:38 2016
@@ -223,16 +223,19 @@ static WeightedFile parseWeightedFile(co
return WeightedFile(FileName, Weight);
}
-static void parseInputFilenamesFile(const StringRef &InputFilenamesFile,
- WeightedFileVector &WFV) {
+static std::unique_ptr<MemoryBuffer>
+parseInputFilenamesFile(const StringRef &InputFilenamesFile,
+ WeightedFileVector &WFV) {
if (InputFilenamesFile == "")
- return;
+ return {};
- auto Buf = MemoryBuffer::getFileOrSTDIN(InputFilenamesFile);
- if (!Buf)
- exitWithErrorCode(Buf.getError(), InputFilenamesFile);
+ auto BufOrError = MemoryBuffer::getFileOrSTDIN(InputFilenamesFile);
+ if (!BufOrError)
+ exitWithErrorCode(BufOrError.getError(), InputFilenamesFile);
+
+ std::unique_ptr<MemoryBuffer> Buffer = std::move(*BufOrError);
+ StringRef Data = Buffer->getBuffer();
- StringRef Data = Buf.get()->getBuffer();
SmallVector<StringRef, 8> Entries;
Data.split(Entries, '\n', /*MaxSplit=*/-1, /*KeepEmpty=*/false);
for (const StringRef &FileWeightEntry : Entries) {
@@ -246,6 +249,8 @@ static void parseInputFilenamesFile(cons
else
WFV.emplace_back(parseWeightedFile(SanitizedEntry));
}
+
+ return Buffer;
}
static int merge_main(int argc, const char *argv[]) {
@@ -288,7 +293,7 @@ static int merge_main(int argc, const ch
WeightedInputs.push_back(WeightedFile(Filename, 1));
for (StringRef WeightedFilename : WeightedInputFilenames)
WeightedInputs.push_back(parseWeightedFile(WeightedFilename));
- parseInputFilenamesFile(InputFilenamesFile, WeightedInputs);
+ auto Buf = parseInputFilenamesFile(InputFilenamesFile, WeightedInputs);
if (WeightedInputs.empty())
exitWithError("No input files specified. See " +
More information about the llvm-commits
mailing list