From 2ad14696124b5a7689a323f56859efb329a3d25c Mon Sep 17 00:00:00 2001 From: Sergey Bronnikov Date: Tue, 22 Dec 2020 16:01:26 +0300 Subject: [PATCH] Add fuzzer for certificate_data_set_pem() Part of #6682 --- libfreerdp/core/test/CMakeLists.txt | 13 +++++++++++ .../TestFuzzCryptoCertificateDataSetPEM.c | 23 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 libfreerdp/core/test/TestFuzzCryptoCertificateDataSetPEM.c diff --git a/libfreerdp/core/test/CMakeLists.txt b/libfreerdp/core/test/CMakeLists.txt index bc618726b..25496c5e8 100644 --- a/libfreerdp/core/test/CMakeLists.txt +++ b/libfreerdp/core/test/CMakeLists.txt @@ -9,6 +9,9 @@ set(${MODULE_PREFIX}_TESTS TestStreamDump.c TestSettings.c) +set(${MODULE_PREFIX}_FUZZERS + TestFuzzCryptoCertificateDataSetPEM.c) + if(WITH_SAMPLE AND WITH_SERVER) set(${MODULE_PREFIX}_TESTS ${${MODULE_PREFIX}_TESTS} @@ -28,6 +31,16 @@ add_definitions(-DTESTING_SRC_DIRECTORY="${PROJECT_SOURCE_DIR}") target_link_libraries(${MODULE_NAME} freerdp winpr freerdp-client) +if (BUILD_FUZZERS) + foreach(test ${${MODULE_PREFIX}_FUZZERS}) + get_filename_component(TestName ${test} NAME_WE) + add_executable(${TestName} ${test}) + target_link_libraries(${TestName} freerdp winpr freerdp-client fuzzer_config) + add_test(${TestName} ${TESTING_OUTPUT_DIRECTORY}/${MODULE_NAME} ${TestName}) + set_target_properties(${TestName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TESTING_OUTPUT_DIRECTORY}") + 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/core/test/TestFuzzCryptoCertificateDataSetPEM.c b/libfreerdp/core/test/TestFuzzCryptoCertificateDataSetPEM.c new file mode 100644 index 000000000..c58ca7366 --- /dev/null +++ b/libfreerdp/core/test/TestFuzzCryptoCertificateDataSetPEM.c @@ -0,0 +1,23 @@ +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) +{ + char* buf = calloc(Size + 1, sizeof(char)); + rdpCertificateData* cert_data = certificate_data_new("somehost", 1234); + if (!buf || !cert_data) + goto cleanup; + + memcpy(buf, Data, Size); + if (!certificate_data_set_pem(cert_data, buf)) + { + goto cleanup; + } + +cleanup: + certificate_data_free(cert_data); + free(buf); + + return 0; +}