From 493b211886baef96ed9ec0ccd2f8aa0dca74c0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D0=BE=D0=BC=D0=B5=D0=BD=D0=BA=D0=BE=20=D0=A1=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B0=D0=BD=20=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Tue, 12 Jan 2021 13:53:32 +0300 Subject: [PATCH] Configure address and undefined sanitizers & fix delete UB --- libs/main/core/piinit.cpp | 2 +- tests/CMakeLists.txt | 12 +++++++++--- tests/suppr.txt | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 tests/suppr.txt diff --git a/libs/main/core/piinit.cpp b/libs/main/core/piinit.cpp index 90eacfa1..38e64be8 100644 --- a/libs/main/core/piinit.cpp +++ b/libs/main/core/piinit.cpp @@ -282,7 +282,7 @@ PIInit::PIInit() { PIInit::~PIInit() { - if (file_charset) delete file_charset; + if (file_charset) delete[] file_charset; file_charset = 0; PIResourcesStorage::instance()->clear(); #ifdef WINDOWS diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bebb15da..e55ddcbe 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,19 +1,25 @@ include(DownloadGTest) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/suppr.txt ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) + macro(pip_test NAME LIBS) file(GLOB _CPPS "${NAME}/*.cpp") file(GLOB _HDRS "${NAME}/*.h") set(_target pip_${NAME}_test) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PIP_ROOT_BINARY_DIR}") add_executable(${_target} ${_CPPS} ${_HDRS}) - target_link_libraries(${_target} pip ${LIBS} gtest_main gmock_main) + if (NOT WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${_target} PRIVATE -fsanitize=address,undefined) + target_link_options(${_target} PRIVATE -fsanitize=address,undefined) + endif() + target_link_libraries(${_target} pip ${LIBS} gtest_main gmock_main asan) add_test(NAME ${_target} COMMAND tests) - add_custom_target(${_target}_perform ALL COMMAND ${_target}) + add_custom_target(${_target}_perform ALL + COMMAND ${CMAKE_COMMAND} -E env "LSAN_OPTIONS=suppressions=suppr.txt" $) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY) list(APPEND PIP_TESTS_LIST "${NAME}") set(PIP_TESTS_LIST ${PIP_TESTS_LIST} PARENT_SCOPE) endmacro() -# Concurrent tests pip_test(concurrent "") pip_test(math "") diff --git a/tests/suppr.txt b/tests/suppr.txt new file mode 100644 index 00000000..ccdc4da6 --- /dev/null +++ b/tests/suppr.txt @@ -0,0 +1,2 @@ +leak:ConditionVariable::SetUp +leak:ConditionLock_ \ No newline at end of file