From: Victor Julien Date: Fri, 20 Sep 2019 10:27:13 +0000 (+0200) Subject: afl/decoder: make file dumps optional X-Git-Tag: suricata-6.0.0-beta1~825 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01862eae78fdd704a7130ce56d006fbd7f4a781c;p=thirdparty%2Fsuricata.git afl/decoder: make file dumps optional --- diff --git a/src/decode-afl.c b/src/decode-afl.c index 335f125611..878a497f2d 100644 --- a/src/decode-afl.c +++ b/src/decode-afl.c @@ -55,9 +55,10 @@ int AFLDecodeIPV6(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, * incrementing 'id' so that we can 'replay' it in * DecoderParseDataFromFileSerie(). */ -int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) { +int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) +{ + bool do_dump = (getenv("SC_AFL_DUMP_FILES") != NULL); uint8_t buffer[65536]; - struct timeval ts; memset(&ts, 0, sizeof(ts)); gettimeofday(&ts, NULL); @@ -81,18 +82,19 @@ int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) { memset(buffer, 0, sizeof(buffer)); #endif /* AFLFUZZ_PERSISTANT_MODE */ - FILE *fp = fopen(filename, "r"); BUG_ON(fp == NULL); size_t size = fread(&buffer, 1, sizeof(buffer), fp); - char outfilename[256]; - snprintf(outfilename, sizeof(outfilename), "dump/%u-%u.%u", - (unsigned int)ts.tv_sec, (unsigned int)ts.tv_usec, cnt); - FILE *out_fp = fopen(outfilename, "w"); - BUG_ON(out_fp == NULL); - (void)fwrite(buffer, size, 1, out_fp); - fclose(out_fp); + if (do_dump) { + char outfilename[256]; + snprintf(outfilename, sizeof(outfilename), "dump/%u-%u.%u", + (unsigned int)ts.tv_sec, (unsigned int)ts.tv_usec, cnt); + FILE *out_fp = fopen(outfilename, "w"); + BUG_ON(out_fp == NULL); + (void)fwrite(buffer, size, 1, out_fp); + fclose(out_fp); + } Packet *p = PacketGetFromAlloc(); if (p != NULL) { @@ -114,14 +116,14 @@ int DecoderParseDataFromFile(char *filename, DecoderFunc Decoder) { #endif /* AFLFUZZ_PERSISTANT_MODE */ /* if we get here there was no crash, so we can remove our files */ - uint32_t x = 0; - for (x = 0; x < cnt; x++) { - char rmfilename[256]; - snprintf(rmfilename, sizeof(rmfilename), "dump/%u-%u.%u", - (unsigned int)ts.tv_sec, (unsigned int)ts.tv_usec, x); - unlink(rmfilename); + if (do_dump) { + for (uint32_t x = 0; x < cnt; x++) { + char rmfilename[256]; + snprintf(rmfilename, sizeof(rmfilename), "dump/%u-%u.%u", + (unsigned int)ts.tv_sec, (unsigned int)ts.tv_usec, x); + unlink(rmfilename); + } } - DecodeThreadVarsFree(&tv, dtv); FlowShutdown(); DefragDestroy();