[libFuzzer] honour -only_ascii=1 when reading the initial corpus. Also, remove ugly...
authorKostya Serebryany <kcc@google.com>
Wed, 2 Sep 2015 19:08:08 +0000 (19:08 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 2 Sep 2015 19:08:08 +0000 (19:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246689 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/FuzzerInternal.h
lib/Fuzzer/FuzzerLoop.cpp
lib/Fuzzer/FuzzerUtil.cpp

index d9dc528368958467bc2d8d1850ca419cfb50a6b0..c44f0ea34d5be7f2ac368d0df5b89317213fbf3c 100644 (file)
@@ -53,6 +53,7 @@ void ComputeSHA1(const uint8_t *Data, size_t Len, uint8_t *Out);
 // Changes U to contain only ASCII (isprint+isspace) characters.
 // Returns true iff U has been changed.
 bool ToASCII(Unit &U);
 // Changes U to contain only ASCII (isprint+isspace) characters.
 // Returns true iff U has been changed.
 bool ToASCII(Unit &U);
+bool IsASCII(const Unit &U);
 
 int NumberOfCpuCores();
 
 
 int NumberOfCpuCores();
 
index 87ba0c0bbcd2373a4e0767cbc4e5de75e95cfb92..dd81616b4558e9d8065ecfe68c8a6ac8225fd52a 100644 (file)
@@ -136,6 +136,8 @@ void Fuzzer::ShuffleAndMinimize() {
       U.clear();
       size_t Last = std::min(First + Options.MaxLen, C.size());
       U.insert(U.begin(), C.begin() + First, C.begin() + Last);
       U.clear();
       size_t Last = std::min(First + Options.MaxLen, C.size());
       U.insert(U.begin(), C.begin() + First, C.begin() + Last);
+      if (Options.OnlyASCII)
+        ToASCII(U);
       size_t NewCoverage = RunOne(U);
       if (NewCoverage) {
         MaxCov = NewCoverage;
       size_t NewCoverage = RunOne(U);
       if (NewCoverage) {
         MaxCov = NewCoverage;
@@ -256,11 +258,7 @@ void Fuzzer::WriteToOutputCorpus(const Unit &U) {
   WriteToFile(U, Path);
   if (Options.Verbosity >= 2)
     Printf("Written to %s\n", Path.c_str());
   WriteToFile(U, Path);
   if (Options.Verbosity >= 2)
     Printf("Written to %s\n", Path.c_str());
-#ifdef DEBUG
-  if (Options.OnlyASCII)
-    for (auto X : U)
-      assert(isprint(X) || isspace(X));
-#endif
+  assert(!Options.OnlyASCII || IsASCII(U));
 }
 
 void Fuzzer::WriteUnitToFileWithPrefix(const Unit &U, const char *Prefix) {
 }
 
 void Fuzzer::WriteUnitToFileWithPrefix(const Unit &U, const char *Prefix) {
index e76adb37481ce400e64a6b3db06e6956fc79ae4a..b04d76d316d81541f95d36463006b410f0a11253 100644 (file)
@@ -86,4 +86,10 @@ bool ToASCII(Unit &U) {
   return Changed;
 }
 
   return Changed;
 }
 
+bool IsASCII(const Unit &U) {
+  for (auto X : U)
+    if (!(isprint(X) || isspace(X))) return false;
+  return true;
+}
+
 }  // namespace fuzzer
 }  // namespace fuzzer