Index: compiler-rt/trunk/lib/fuzzer/afl/afl_driver.cpp =================================================================== --- compiler-rt/trunk/lib/fuzzer/afl/afl_driver.cpp +++ compiler-rt/trunk/lib/fuzzer/afl/afl_driver.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include #include @@ -305,6 +306,18 @@ 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(NL); +} + int main(int argc, char **argv) { fprintf(stderr, "======================= INFO =========================\n" @@ -331,11 +344,12 @@ 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); Index: compiler-rt/trunk/test/fuzzer/afl-driver.test =================================================================== --- compiler-rt/trunk/test/fuzzer/afl-driver.test +++ compiler-rt/trunk/test/fuzzer/afl-driver.test @@ -21,9 +21,16 @@ 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`