# FIXIT - there is probably a better way to do this
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SPECIAL_FLAGS}" )
+set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SPECIAL_FLAGS}" )
+
include_directories (${PROJECT_BINARY_DIR})
include_directories (${PROJECT_SOURCE_DIR})
endif ( ENABLE_PROFILE AND CMAKE_COMPILER_IS_GNUCXX )
if ( ENABLE_ADDRESS_SANITIZER )
- set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer" )
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer" )
+ set ( SPECIAL_FLAGS "-fsanitize=address -fno-omit-frame-pointer" )
endif ( ENABLE_ADDRESS_SANITIZER )
+if ( ENABLE_THREAD_SANITIZER )
+ set ( SPECIAL_FLAGS "-fsanitize=thread -fno-omit-frame-pointer" )
+endif ( ENABLE_THREAD_SANITIZER )
+
if ( ENABLE_CODE_COVERAGE )
set ( CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DNDEBUG" )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage" )
option ( ENABLE_GDB "Enable gdb debugging information" OFF )
option ( ENABLE_PROFILE "Enable profiling options (developers only)" OFF )
option ( ENABLE_ADDRESS_SANITIZER "enable address sanitizer support" OFF )
+option ( ENABLE_THREAD_SANITIZER "enable thread sanitizer support" OFF )
option ( ENABLE_CODE_COVERAGE "Whether to enable code coverage support" OFF )
# signals
fi
AC_ARG_ENABLE(address-sanitizer,
- AS_HELP_STRING([--enable-address-sanitizer],[enable AddressSanitizer support]),
+ AS_HELP_STRING([--enable-address-sanitizer],[enable address sanitizer support]),
[
ASAN_CCXFLAGS="-fsanitize=address -fno-omit-frame-pointer"
])
+AC_ARG_ENABLE(thread-sanitizer,
+ AS_HELP_STRING([--enable-thread-sanitizer],[enable thread sanitizer support]),
+ [
+ ASAN_CCXFLAGS="-fsanitize=thread -fno-omit-frame-pointer"
+ ])
+
#--------------------------------------------------------------------------
# compile-time security features
#--------------------------------------------------------------------------
--disable-corefiles prevent Snort from generating core files
--enable-address-sanitizer
enable address sanitizer support
+ --enable-thread-sanitizer
+ enable thread sanitizer support
--enable-unit-tests build unit tests
--enable-piglet build piglet test harness
--disable-static-daq link static DAQ modules
--disable-address-sanitizer)
append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL false
;;
+ --enable-thread-sanitizer)
+ append_cache_entry ENABLE_THREAD_SANITIZER BOOL true
+ ;;
+ --disable-thread-sanitizer)
+ append_cache_entry ENABLE_THREAD_SANITIZER BOOL false
+ ;;
--enable-unit-tests)
append_cache_entry ENABLE_UNIT_TESTS BOOL true
;;
TEST_CASE("File_Decomp_SetBuf-Decompr_Depth-error", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->Total_Out = 20;
p_s->Decompr_Depth = 10;
REQUIRE(File_Decomp_SetBuf(p_s) == File_Decomp_Error);
TEST_CASE("File_Decomp_SetBuf-Compr_Depth-error", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->Total_In = 20;
p_s->Compr_Depth = 10;
REQUIRE(File_Decomp_SetBuf(p_s) == File_Decomp_Error);
TEST_CASE("File_Decomp_New", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
REQUIRE(p_s->State == STATE_NEW);
REQUIRE(p_s->Sig_State == 0);
REQUIRE(p_s->Total_In == 0);
TEST_CASE("File_Decomp-not_active", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
REQUIRE(File_Decomp(p_s) == File_Decomp_Error);
File_Decomp_Free(p_s);
}
TEST_CASE("File_Decomp-complete_state", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->State = STATE_COMPLETE;
REQUIRE(File_Decomp(p_s) == File_Decomp_Error);
File_Decomp_Free(p_s);
TEST_CASE("Initialize_Decompression-not_active", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
REQUIRE(Initialize_Decompression(p_s) == File_Decomp_Error);
File_Decomp_Free(p_s);
}
TEST_CASE("Process_Decompression-not_active", "[file_decomp]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
REQUIRE(Process_Decompression(p_s) == File_Decomp_Error);
File_Decomp_Free(p_s);
}
-
#endif
+
TEST_CASE("File_Decomp_PDF-not_pdf-error", "[file_decomp_pdf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t));
p_s->File_Type = FILE_TYPE_SWF;
REQUIRE(File_Decomp_PDF(p_s) == File_Decomp_Error);
TEST_CASE("File_Decomp_PDF-bad_state-error", "[file_decomp_pdf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t));
p_s->File_Type = FILE_TYPE_PDF;
p_s->PDF->State = PDF_STATE_NEW;
TEST_CASE("File_Decomp_End_PDF-bad_type-error", "[file_decomp_pdf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->PDF = (fd_PDF_t*)snort_calloc(sizeof(fd_PDF_t));
p_s->File_Type = FILE_TYPE_PDF;
p_s->PDF->Decomp_Type = FILE_COMPRESSION_TYPE_LZMA;
REQUIRE(File_Decomp_End_PDF(p_s) == File_Decomp_Error);
File_Decomp_Free(p_s);
}
-
#endif
+
TEST_CASE("File_Decomp_SWF-not_swf-error", "[file_decomp_swf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t));
p_s->File_Type = FILE_TYPE_PDF;
REQUIRE(File_Decomp_SWF(p_s) == File_Decomp_Error);
TEST_CASE("File_Decomp_SWF-bad_state-error", "[file_decomp_swf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t));
p_s->File_Type = FILE_TYPE_SWF;
p_s->SWF->State = SWF_STATE_NEW;
TEST_CASE("File_Decomp_Init_SWF-bad_type-error", "[file_decomp_swf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->File_Type = FILE_TYPE_SWF;
p_s->Decomp_Type = FILE_COMPRESSION_TYPE_DEFLATE;
REQUIRE(File_Decomp_Init_SWF(p_s) == File_Decomp_Error);
TEST_CASE("File_Decomp_End_SWF-bad_type-error", "[file_decomp_swf]")
{
- fd_session_p_t p_s;
+ fd_session_p_t p_s = File_Decomp_New();
- REQUIRE((p_s = File_Decomp_New()) != (fd_session_p_t)NULL);
+ REQUIRE(p_s != nullptr);
p_s->SWF = (fd_SWF_t*)snort_calloc(sizeof(fd_SWF_t));
p_s->Decomp_Type = FILE_COMPRESSION_TYPE_DEFLATE;
REQUIRE(File_Decomp_End_SWF(p_s) == File_Decomp_Error);
p_s->File_Type = FILE_TYPE_SWF;
File_Decomp_Free(p_s);
}
-
-
#endif
+