Skip to content

Commit

Permalink
[Fuzzer] Afl driver changing iterations handling
Browse files Browse the repository at this point in the history
Handling differently the iterations with the type limit and eventually an error message.

Reviewers: morehouse, kcc

Reviewed By: morehouse

Differential Revision: https://reviews.llvm.org/D47880

llvm-svn: 334510
  • Loading branch information
devnexen committed Jun 12, 2018
1 parent 51ef8da commit 301855f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 7 deletions.
24 changes: 19 additions & 5 deletions compiler-rt/lib/fuzzer/afl/afl_driver.cpp
Expand Up @@ -59,6 +59,7 @@ statistics from the file. If that fails then the process will quit.
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include <limits.h>

#include <fstream>
#include <iostream>
Expand Down Expand Up @@ -305,6 +306,18 @@ int ExecuteFilesOnyByOne(int argc, char **argv) {
return 0;
}

static void set_iterations(int *N, const char *arg) {
char *next_char;
long NL = strtol(arg, &next_char, 10);
if (NL < 1 || NL > INT_MAX || *next_char != '\0') {
fprintf(stderr, "WARNING: iterations invalid `%s`\n",
arg);
::exit(-1);
}

*N = static_cast<int>(NL);
}

int main(int argc, char **argv) {
fprintf(stderr,
"======================= INFO =========================\n"
Expand All @@ -331,11 +344,12 @@ int main(int argc, char **argv) {

int N = 1000;
if (argc == 2 && argv[1][0] == '-')
N = atoi(argv[1] + 1);
else if(argc == 2 && (N = atoi(argv[1])) > 0)
fprintf(stderr, "WARNING: using the deprecated call style `%s %d`\n",
argv[0], N);
else if (argc > 1)
set_iterations(&N, argv[1] + 1);
else if(argc == 2) {
fprintf(stderr, "WARNING: using the deprecated call style `%s %d`\n",
argv[0], N);
set_iterations(&N, argv[1]);
} else if (argc > 1)
return ExecuteFilesOnyByOne(argc, argv);

assert(N > 0);
Expand Down
11 changes: 9 additions & 2 deletions compiler-rt/test/fuzzer/afl-driver.test
Expand Up @@ -21,9 +21,16 @@ CHECK3: __afl_persistent_loop calle, Count = 666
CHECK3: LLVMFuzzerTestOneInput called; Size = 3


RUN: %run %t-AFLDriverTest %t.file3 2>&1 | FileCheck %s --check-prefix=CHECK4
CHECK4: LLVMFuzzerTestOneInput called; Size = 3
RUN: not %run %t-AFLDriverTest %t.file3 2>&1 | FileCheck %s --check-prefix=CHECK4
CHECK4: WARNING: using the deprecated call style `{{.*}} 1000`
CHECK4: WARNING: iterations invalid `{{.*}}`

RUN: %run %t-AFLDriverTest %t.file3 %t.file4 2>&1 | FileCheck %s --check-prefix=CHECK5
CHECK5: LLVMFuzzerTestOneInput called; Size = 3
CHECK5: LLVMFuzzerTestOneInput called; Size = 4

RUN: not %run %t-AFLDriverTest < %t.file3 --1 2>&1 | FileCheck %s --check-prefix=CHECK6
CHECK6: WARNING: iterations invalid `-1`

RUN: not %run %t-AFLDriverTest < %t.file3 -Invalid 2>&1 | FileCheck %s --check-prefix=CHECK7
CHECK7: WARNING: iterations invalid `Invalid`

0 comments on commit 301855f

Please sign in to comment.