Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Unified Diff: lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp

Issue 1139673004: Harden writer of munged bitcode for fuzzing (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix nits. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
diff --git a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
index effe128cac9e5f4d4ce9539864837383de623ded..e216535c53762c809f8a8f1e26a815a09ff454b7 100644
--- a/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
+++ b/lib/Bitcode/NaCl/TestUtils/NaClBitcodeMunge.cpp
@@ -29,7 +29,7 @@ using namespace llvm;
// For debugging. When true, shows each test being run.
static bool TraceTestRuns = false;
-void NaClBitcodeMunger::setupTest(
+bool NaClBitcodeMunger::setupTest(
const char *TestName, const uint64_t Munges[], size_t MungesSize,
bool AddHeader) {
assert(DumpStream == nullptr && "Test run with DumpStream already defined");
@@ -53,8 +53,10 @@ void NaClBitcodeMunger::setupTest(
&& !(WriteFlags.getTryToRecover()
&& Results.NumRepairs == Results.NumErrors)
&& !(WriteFlags.getWriteBadAbbrevIndex()
- && Results.WroteBadAbbrevIndex && Results.NumErrors == 1))
- report_fatal_error("Unable to generate bitcode file due to write errors");
+ && Results.WroteBadAbbrevIndex && Results.NumErrors == 1)) {
+ Error() << "Unable to generate bitcode file due to write errors\n";
+ return false;
+ }
// Add null terminator, so that we meet the requirements of the
// MemoryBuffer API.
@@ -63,9 +65,10 @@ void NaClBitcodeMunger::setupTest(
MungedInput = MemoryBuffer::getMemBuffer(
StringRef(MungedInputBuffer.data(), MungedInputBuffer.size()-1),
TestName);
+ return true;
}
-void NaClBitcodeMunger::cleanupTest() {
+bool NaClBitcodeMunger::cleanupTest() {
RunAsDeathTest = false;
WriteFlags.reset();
MungedBitcode.removeEdits();
@@ -74,6 +77,7 @@ void NaClBitcodeMunger::cleanupTest() {
DumpStream->flush();
delete DumpStream;
DumpStream = nullptr;
+ return !FoundErrors;
}
// Return the next line of input (including eoln), starting from
@@ -110,24 +114,38 @@ getLinesWithTextMatch(const std::string &Substring, bool MustBePrefix) const {
return Messages;
}
+bool NaClWriteMunger::runTest(const char* Name, const uint64_t Munges[],
+ size_t MungesSize) {
+ bool AddHeader = true;
+ if (!setupTest(Name, Munges, MungesSize, AddHeader))
+ return cleanupTest();
+ MemoryBufferRef InputRef(MungedInput->getMemBufferRef());
+ NaClMungedBitcode WrittenBitcode(MemoryBuffer::getMemBuffer(InputRef));
+ WrittenBitcode.print(WriteFlags.getErrStream());
+ return cleanupTest();
+}
+
bool NaClObjDumpMunger::runTestWithFlags(
const char *Name, const uint64_t Munges[], size_t MungesSize,
bool AddHeader, bool NoRecords, bool NoAssembly) {
- setupTest(Name, Munges, MungesSize, AddHeader);
+ if (!setupTest(Name, Munges, MungesSize, AddHeader))
+ return cleanupTest();
if (NaClObjDump(MungedInput.get()->getMemBufferRef(),
getDumpStream(), NoRecords, NoAssembly))
FoundErrors = true;
- cleanupTest();
- return !FoundErrors;
+ return cleanupTest();
}
bool NaClParseBitcodeMunger::runTest(
const char *Name, const uint64_t Munges[], size_t MungesSize,
bool VerboseErrors) {
bool AddHeader = true;
- setupTest(Name, Munges, MungesSize, AddHeader);
+ if (!setupTest(Name, Munges, MungesSize, AddHeader))
+ return cleanupTest();
+
LLVMContext &Context = getGlobalContext();
+
raw_ostream *VerboseStrm = VerboseErrors ? &getDumpStream() : nullptr;
ErrorOr<Module *> ModuleOrError =
NaClParseBitcodeFile(MungedInput->getMemBufferRef(), Context,
@@ -139,16 +157,17 @@ bool NaClParseBitcodeMunger::runTest(
} else {
Error() << ModuleOrError.getError().message() << "\n";
}
- cleanupTest();
- return !FoundErrors;
+ return cleanupTest();
}
bool NaClCompressMunger::runTest(const char* Name, const uint64_t Munges[],
size_t MungesSize) {
bool AddHeader = true;
- setupTest(Name, Munges, MungesSize, AddHeader);
+ if (!setupTest(Name, Munges, MungesSize, AddHeader))
+ return cleanupTest();
+
NaClBitcodeCompressor Compressor;
- bool Result = Compressor.compress(MungedInput.get(), getDumpStream());
- cleanupTest();
- return Result;
+ if (!Compressor.compress(MungedInput.get(), getDumpStream()))
+ Error() << "Unable to compress\n";
+ return cleanupTest();
}

Powered by Google App Engine
This is Rietveld 408576698