AM_CONDITIONAL([BUILD_FUZZTARGETS], [test "x$enable_fuzztargets" = "xyes"])
AC_PROG_CXX
AS_IF([test "x$enable_fuzztargets" = "xyes"], [
+ AC_DEFINE([FUZZ], [1], [Fuzz targets are enabled])
AC_DEFINE([AFLFUZZ_NO_RANDOM], [1], [Disable all use of random functions])
CFLAGS_ORIG=$CFLAGS
CFLAGS="-Werror"
# enable the running of unit tests
AC_ARG_ENABLE(unittests,
AS_HELP_STRING([--enable-unittests], [Enable compilation of the unit tests]),[enable_unittests=$enableval],[enable_unittests=no])
- AS_IF([test "x$enable_fuzztargets" = "xyes"], [
- export enable_unittests="yes"
- ])
AS_IF([test "x$enable_unittests" = "xyes"], [
AC_DEFINE([UNITTESTS],[1],[Enable built-in unittests])
])
}
if (pos > 0 && pos < size) {
// dump signatures to a file so as to reuse SigLoadSignatures
- if (UTHbufferToFile(suricata.sig_file, data, pos-1) < 0) {
+ if (TestHelperBufferToFile(suricata.sig_file, data, pos-1) < 0) {
return 0;
}
} else {
- if (UTHbufferToFile(suricata.sig_file, data, pos) < 0) {
+ if (TestHelperBufferToFile(suricata.sig_file, data, pos) < 0) {
return 0;
}
}
size -= pos;
//rewrite buffer to a file as libpcap does not have buffer inputs
- if (UTHbufferToFile("/tmp/fuzz.pcap", data, size) < 0) {
+ if (TestHelperBufferToFile("/tmp/fuzz.pcap", data, size) < 0) {
return 0;
}
#include "util-unittest.h"
#include "util-unittest-helper.h"
+#if defined(UNITTESTS) || defined(FUZZ)
+Flow *TestHelperBuildFlow(int family, const char *src, const char *dst, Port sp, Port dp)
+{
+ struct in_addr in;
+
+ Flow *f = SCMalloc(sizeof(Flow));
+ if (unlikely(f == NULL)) {
+ printf("FlowAlloc failed\n");
+ ;
+ return NULL;
+ }
+ memset(f, 0x00, sizeof(Flow));
+
+ FLOW_INITIALIZE(f);
+
+ if (family == AF_INET) {
+ f->flags |= FLOW_IPV4;
+ } else if (family == AF_INET6) {
+ f->flags |= FLOW_IPV6;
+ }
+
+ if (src != NULL) {
+ if (family == AF_INET) {
+ if (inet_pton(AF_INET, src, &in) != 1) {
+ printf("invalid address %s\n", src);
+ SCFree(f);
+ return NULL;
+ }
+ f->src.addr_data32[0] = in.s_addr;
+ } else {
+ BUG_ON(1);
+ }
+ }
+ if (dst != NULL) {
+ if (family == AF_INET) {
+ if (inet_pton(AF_INET, dst, &in) != 1) {
+ printf("invalid address %s\n", dst);
+ SCFree(f);
+ return NULL;
+ }
+ f->dst.addr_data32[0] = in.s_addr;
+ } else {
+ BUG_ON(1);
+ }
+ }
+
+ f->sp = sp;
+ f->dp = dp;
+
+ return f;
+}
+/** \brief writes the contents of a buffer into a file */
+int TestHelperBufferToFile(const char *name, const uint8_t *data, size_t size)
+{
+ if (remove(name) != 0) {
+ if (errno != ENOENT) {
+ printf("failed remove, errno=%d\n", errno);
+ return -1;
+ }
+ }
+ FILE *fd = fopen(name, "wb");
+ if (fd == NULL) {
+ printf("failed open, errno=%d\n", errno);
+ return -2;
+ }
+ if (fwrite (data, 1, size, fd) != size) {
+ fclose(fd);
+ return -3;
+ }
+ fclose(fd);
+ return 0;
+}
+
+#endif
#ifdef UNITTESTS
/**
Flow *UTHBuildFlow(int family, const char *src, const char *dst, Port sp, Port dp)
{
- struct in_addr in;
-
- Flow *f = SCMalloc(sizeof(Flow));
- if (unlikely(f == NULL)) {
- printf("FlowAlloc failed\n");
- ;
- return NULL;
- }
- memset(f, 0x00, sizeof(Flow));
-
- FLOW_INITIALIZE(f);
-
- if (family == AF_INET) {
- f->flags |= FLOW_IPV4;
- } else if (family == AF_INET6) {
- f->flags |= FLOW_IPV6;
- }
-
- if (src != NULL) {
- if (family == AF_INET) {
- if (inet_pton(AF_INET, src, &in) != 1) {
- printf("invalid address %s\n", src);
- SCFree(f);
- return NULL;
- }
- f->src.addr_data32[0] = in.s_addr;
- } else {
- BUG_ON(1);
- }
- }
- if (dst != NULL) {
- if (family == AF_INET) {
- if (inet_pton(AF_INET, dst, &in) != 1) {
- printf("invalid address %s\n", dst);
- SCFree(f);
- return NULL;
- }
- f->dst.addr_data32[0] = in.s_addr;
- } else {
- BUG_ON(1);
- }
- }
-
- f->sp = sp;
- f->dp = dp;
-
- return f;
+ return TestHelperBuildFlow(family, src, dst, sp, dp);
}
void UTHFreeFlow(Flow *flow)
PASS;
}
-/** \brief writes the contents of a buffer into a file */
-int UTHbufferToFile(const char * name, const uint8_t *data, size_t size) {
- FILE * fd;
- if (remove(name) != 0) {
- if (errno != ENOENT) {
- printf("failed remove, errno=%d\n", errno);
- return -1;
- }
- }
- fd = fopen(name, "wb");
- if (fd == NULL) {
- printf("failed open, errno=%d\n", errno);
- return -2;
- }
- if (fwrite (data, 1, size, fd) != size) {
- fclose(fd);
- return -3;
- }
- fclose(fd);
- return 0;
-}
-
/*
* unittests for the unittest helpers
*/
#ifndef __UTIL_UNITTEST_HELPER__
#define __UTIL_UNITTEST_HELPER__
+#if defined(UNITTESTS) || defined(FUZZ)
+Flow *TestHelperBuildFlow(int family, const char *src, const char *dst, Port sp, Port dp);
+int TestHelperBufferToFile(const char *name, const uint8_t *data, size_t size);
+#endif
#ifdef UNITTESTS
uint32_t UTHSetIPv4Address(const char *);
void * UTHmemsearch(const void *big, size_t big_len, const void *little, size_t little_len);
int UTHParseSignature(const char *str, bool expect);
-int UTHbufferToFile(const char * name, const uint8_t *data, size_t size);
#endif
void UTHRegisterTests(void);