From b1ae467ae2d72d6c0e5a408fd617d0b718a036e3 Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov Date: Tue, 22 Dec 2020 16:02:33 +0300 Subject: [PATCH] [libfreerdp/common] Add fuzzing tests Part of #5063 Closes #6681 --- libfreerdp/common/test/CMakeLists.txt | 17 +++++++++++++++ .../TestFuzzCommonAssistanceBinToHexString.c | 8 +++++++ .../TestFuzzCommonAssistanceHexStringToBin.c | 9 ++++++++ .../TestFuzzCommonAssistanceParseFileBuffer.c | 21 +++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 libfreerdp/common/test/TestFuzzCommonAssistanceBinToHexString.c create mode 100644 libfreerdp/common/test/TestFuzzCommonAssistanceHexStringToBin.c create mode 100644 libfreerdp/common/test/TestFuzzCommonAssistanceParseFileBuffer.c diff --git a/libfreerdp/common/test/CMakeLists.txt b/libfreerdp/common/test/CMakeLists.txt index 726d11973..c1f871bf2 100644 --- a/libfreerdp/common/test/CMakeLists.txt +++ b/libfreerdp/common/test/CMakeLists.txt @@ -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}) diff --git a/libfreerdp/common/test/TestFuzzCommonAssistanceBinToHexString.c b/libfreerdp/common/test/TestFuzzCommonAssistanceBinToHexString.c new file mode 100644 index 000000000..6b23c7879 --- /dev/null +++ b/libfreerdp/common/test/TestFuzzCommonAssistanceBinToHexString.c @@ -0,0 +1,8 @@ +#include + +int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) +{ + char* pass = freerdp_assistance_bin_to_hex_string((void*)Data, Size); + free(pass); + return 0; +} diff --git a/libfreerdp/common/test/TestFuzzCommonAssistanceHexStringToBin.c b/libfreerdp/common/test/TestFuzzCommonAssistanceHexStringToBin.c new file mode 100644 index 000000000..6a4a7dc63 --- /dev/null +++ b/libfreerdp/common/test/TestFuzzCommonAssistanceHexStringToBin.c @@ -0,0 +1,9 @@ +#include + +int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) +{ + BYTE* pass = freerdp_assistance_hex_string_to_bin((void*)Data, &Size); + free(pass); + + return 0; +} diff --git a/libfreerdp/common/test/TestFuzzCommonAssistanceParseFileBuffer.c b/libfreerdp/common/test/TestFuzzCommonAssistanceParseFileBuffer.c new file mode 100644 index 000000000..b2b23b36c --- /dev/null +++ b/libfreerdp/common/test/TestFuzzCommonAssistanceParseFileBuffer.c @@ -0,0 +1,21 @@ +#include + +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; +}