Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fuzzing and rust coverage #5595

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2624,7 +2624,7 @@ fi
AC_ARG_ENABLE(fuzztargets,
AS_HELP_STRING([--enable-fuzztargets], [Enable fuzz targets]),[enable_fuzztargets=$enableval],[enable_fuzztargets=no])
AM_CONDITIONAL([BUILD_FUZZTARGETS], [test "x$enable_fuzztargets" = "xyes"])
AM_CONDITIONAL([RUST_BUILD_STD], [test "x$enable_fuzztargets" = "xyes" && echo "$rust_compiler_version" | grep -q nightly])
AM_CONDITIONAL([RUST_BUILD_STD], [test "x$enable_fuzztargets" = "xyes" && echo "$rust_compiler_version" | grep -q nightly && echo "$RUSTFLAGS" | grep -v -q coverage])
AC_PROG_CXX
AS_IF([test "x$enable_fuzztargets" = "xyes"], [
AS_IF([test "x$CARGO_BUILD_TARGET" = "x" && echo "$rust_compiler_version" | grep -q nightly], [
Expand Down
60 changes: 47 additions & 13 deletions src/tests/fuzz/onefile.c
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <unistd.h>
#include "autoconf.h"

int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);

int main(int argc, char** argv)
{
FILE * fp;
static int runOneFile(const char *fname) {
//opens the file, get its size, and reads it into a buffer
uint8_t *data;
size_t size;

if (argc != 2) {
return 1;
}
#ifdef AFLFUZZ_PERSISTANT_MODE
while (__AFL_LOOP(1000)) {
#endif /* AFLFUZZ_PERSISTANT_MODE */

//opens the file, get its size, and reads it into a buffer
fp = fopen(argv[1], "rb");
FILE *fp = fopen(fname, "rb");
if (fp == NULL) {
return 2;
}
Expand Down Expand Up @@ -51,6 +43,48 @@ int main(int argc, char** argv)
LLVMFuzzerTestOneInput(data, size);
free(data);
fclose(fp);
return 0;
}

int main(int argc, char** argv)
{
DIR *d;
struct dirent *dir;
int r;

if (argc != 2) {
return 1;
}
#ifdef AFLFUZZ_PERSISTANT_MODE
while (__AFL_LOOP(1000)) {
#endif /* AFLFUZZ_PERSISTANT_MODE */

d = opendir(argv[1]);
if (d == NULL) {
//run one file
r = runOneFile(argv[1]);
if (r != 0) {
return r;
}
} else {
//run every file in one directory
if (chdir(argv[1]) != 0) {
closedir(d);
printf("Invalid directory\n");
return 2;
}
while((dir = readdir(d)) != NULL) {
if (dir->d_type != DT_REG) {
continue;
}
printf("Running file %s ", dir->d_name);
r = runOneFile(dir->d_name);
if (r != 0) {
return r;
}
}
closedir(d);
}
#ifdef AFLFUZZ_PERSISTANT_MODE
}
#endif /* AFLFUZZ_PERSISTANT_MODE */
Expand Down