AC_DEFINE([AFLFUZZ_MIME], [1], [Enable --afl-mime commandline option])
AC_DEFINE([AFLFUZZ_DECODER], [1], [Enable --afl-decoder-$proto commandline option])
AC_DEFINE([AFLFUZZ_DER], [1], [Enable --afl-der commandline option])
+ AC_DEFINE([AFLFUZZ_RULES], [1], [Enable --afl-rules commandline option])
# test for AFL PERSISTANT_MODE support
CFLAGS_ORIG=$CFLAGS
return;
}
+#ifdef AFLFUZZ_RULES
+#include "util-reference-config.h"
+int RuleParseDataFromFile(char *filename)
+{
+ char buffer[65536];
+
+ SigTableSetup();
+ SigParsePrepare();
+ SCReferenceConfInit();
+ SCClassConfInit();
+
+ DetectEngineCtx *de_ctx = DetectEngineCtxInit();
+ if (de_ctx == NULL)
+ return 0;
+
+#ifdef AFLFUZZ_PERSISTANT_MODE
+ while (__AFL_LOOP(10000)) {
+ /* reset state */
+ memset(buffer, 0, sizeof(buffer));
+#endif /* AFLFUZZ_PERSISTANT_MODE */
+
+ FILE *fp = fopen(filename, "r");
+ BUG_ON(fp == NULL);
+
+ size_t result = fread(&buffer, 1, sizeof(buffer), fp);
+ if (result < sizeof(buffer)) {
+ buffer[result] = '\0';
+ Signature *s = SigInit(de_ctx, buffer);
+ if (s != NULL) {
+ SigFree(s);
+ }
+ }
+ fclose(fp);
+
+#ifdef AFLFUZZ_PERSISTANT_MODE
+ }
+#endif /* AFLFUZZ_PERSISTANT_MODE */
+
+ DetectEngineCtxFree(de_ctx);
+ SCClassConfDeinit();
+ SCReferenceConfDeinit();
+ return 0;
+}
+#endif /* AFLFUZZ_RULES */
+
/*
* TESTS
*/
void DetectParseRegexAddToFreeList(pcre *regex, pcre_extra *study);
void DetectParseFreeRegexes(void);
+#ifdef AFLFUZZ_RULES
+int RuleParseDataFromFile(char *filename);
+#endif
+
#endif /* __DETECT_PARSE_H__ */
{"netmap", optional_argument, 0, 0},
{"pcap", optional_argument, 0, 0},
{"simulate-ips", 0, 0 , 0},
+ {"afl-rules", required_argument, 0 , 0},
{"afl-http-request", required_argument, 0 , 0},
{"afl-http", required_argument, 0 , 0},
{"afl-tls-request", required_argument, 0 , 0},
if (ParseCommandLinePcapLive(suri, optarg) != TM_ECODE_OK) {
return TM_ECODE_FAILED;
}
+#ifdef AFLFUZZ_RULES
+ } else if(strcmp((long_opts[option_index]).name, "afl-rules") == 0) {
+ exit(RuleParseDataFromFile(optarg));
+#endif
#ifdef AFLFUZZ_APPLAYER
} else if(strcmp((long_opts[option_index]).name, "afl-http-request") == 0) {
//printf("arg: //%s\n", optarg);