[libFuzzer] limit the size of the inputs printed to stderr
authorKostya Serebryany <kcc@google.com>
Fri, 31 Jul 2015 22:07:17 +0000 (22:07 +0000)
committerKostya Serebryany <kcc@google.com>
Fri, 31 Jul 2015 22:07:17 +0000 (22:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243795 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/FuzzerLoop.cpp

index e659223fe1a5bf773a704416f345f0d2d8e8f1cf..5e8e2e4aae34a12c4fe34a91c9d5be0361a6ebdf 100644 (file)
@@ -14,6 +14,7 @@
 #include <algorithm>
 
 namespace fuzzer {
+static const size_t kMaxUnitSizeToPrint = 4096;
 
 // Only one Fuzzer per process.
 static Fuzzer *F;
@@ -68,7 +69,8 @@ void Fuzzer::AlarmCallback() {
     Printf("ALARM: working on the last Unit for %zd seconds\n", Seconds);
     Printf("       and the timeout value is %d (use -timeout=N to change)\n",
            Options.UnitTimeoutSec);
-    Print(CurrentUnit, "\n");
+    if (CurrentUnit.size() <= kMaxUnitSizeToPrint)
+      Print(CurrentUnit, "\n");
     PrintUnitInASCIIOrTokens(CurrentUnit, "\n");
     WriteUnitToFileWithPrefix(CurrentUnit, "timeout-");
     exit(1);
@@ -160,7 +162,8 @@ size_t Fuzzer::RunOne(const Unit &U) {
   if (TimeOfUnit > TimeOfLongestUnitInSeconds) {
     TimeOfLongestUnitInSeconds = TimeOfUnit;
     Printf("Longest unit: %zd s:\n", TimeOfLongestUnitInSeconds);
-    Print(U, "\n");
+    if (U.size() <= kMaxUnitSizeToPrint)
+      Print(U, "\n");
     WriteUnitToFileWithPrefix(U, "long-running-unit-");
   }
   return Res;
@@ -252,8 +255,11 @@ void Fuzzer::WriteToOutputCorpus(const Unit &U) {
 void Fuzzer::WriteUnitToFileWithPrefix(const Unit &U, const char *Prefix) {
   std::string Path = Prefix + Hash(U);
   WriteToFile(U, Path);
-  Printf("Test unit written to %s\nBase64: ", Path.c_str());
-  PrintFileAsBase64(Path);
+  Printf("Test unit written to %s\n", Path.c_str());
+  if (U.size() <= kMaxUnitSizeToPrint) {
+    Printf("Base64: ");
+    PrintFileAsBase64(Path);
+  }
 }
 
 void Fuzzer::SaveCorpus() {