[libfreerdp/common] Add fuzzing tests

Part of #5063
Closes #6681
This commit is contained in:
Sergey Bronnikov
2020-12-22 16:02:33 +03:00
committed by akallabeth
parent 1c0c804981
commit b1ae467ae2
4 changed files with 55 additions and 0 deletions

View File

@@ -8,6 +8,11 @@ set(${MODULE_PREFIX}_TESTS
TestAddinArgv.c
TestCommonAssistance.c)
set(${MODULE_PREFIX}_FUZZERS
TestFuzzCommonAssistanceParseFileBuffer.c
TestFuzzCommonAssistanceBinToHexString.c
TestFuzzCommonAssistanceHexStringToBin.c)
create_test_sourcelist(${MODULE_PREFIX}_SRCS
${${MODULE_PREFIX}_DRIVER}
${${MODULE_PREFIX}_TESTS})
@@ -16,6 +21,18 @@ add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS})
target_link_libraries(${MODULE_NAME} freerdp winpr)
if (BUILD_FUZZERS)
foreach(test ${${MODULE_PREFIX}_FUZZERS})
get_filename_component(TestName ${test} NAME_WE)
add_executable(${TestName} ${test})
# Use PUBLIC to force 'fuzzer_config' for all dependent targets.
target_link_libraries(${TestName} PUBLIC freerdp winpr fuzzer_config)
add_test(${TestName} ${TESTING_OUTPUT_DIRECTORY}/${MODULE_NAME} ${TestName})
set_target_properties(${TestName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}")
add_dependencies(fuzzers ${TestName})
endforeach()
endif (BUILD_FUZZERS)
set_target_properties(${MODULE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}")
foreach(test ${${MODULE_PREFIX}_TESTS})

View File

@@ -0,0 +1,8 @@
#include <freerdp/assistance.h>
int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size)
{
char* pass = freerdp_assistance_bin_to_hex_string((void*)Data, Size);
free(pass);
return 0;
}

View File

@@ -0,0 +1,9 @@
#include <freerdp/assistance.h>
int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size)
{
BYTE* pass = freerdp_assistance_hex_string_to_bin((void*)Data, &Size);
free(pass);
return 0;
}

View File

@@ -0,0 +1,21 @@
#include <freerdp/assistance.h>
static int parse_file_buffer(const uint8_t* Data, size_t Size)
{
static const char TEST_MSRC_INCIDENT_PASSWORD_TYPE2[] = "48BJQ853X3B4";
int status = -1;
rdpAssistanceFile* file = freerdp_assistance_file_new();
if (!file)
return -1;
status = freerdp_assistance_parse_file_buffer(file, (char*)Data, Size,
TEST_MSRC_INCIDENT_PASSWORD_TYPE2);
freerdp_assistance_file_free(file);
return status >= 0 ? TRUE : FALSE;
}
int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size)
{
parse_file_buffer(Data, Size);
return 0;
}