| @@ -0,0 +1,51 @@ | |||||
| # This file is part of CMake-sanitizers. | |||||
| # | |||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| # of this software and associated documentation files (the "Software"), to deal | |||||
| # in the Software without restriction, including without limitation the rights | |||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| # copies of the Software, and to permit persons to whom the Software is | |||||
| # furnished to do so, subject to the following conditions: | |||||
| # | |||||
| # The above copyright notice and this permission notice shall be included in all | |||||
| # copies or substantial portions of the Software. | |||||
| # | |||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| # SOFTWARE. | |||||
| # | |||||
| # | |||||
| # Copyright (c) | |||||
| # 2013-2015 Matt Arsenault | |||||
| # 2015 RWTH Aachen University, Federal Republic of Germany | |||||
| # | |||||
| # | |||||
| # project information | |||||
| # | |||||
| # minimum required cmake version | |||||
| cmake_minimum_required(VERSION 2.8) | |||||
| # project name | |||||
| project("CMake-sanitizers") | |||||
| # | |||||
| # cmake configuration | |||||
| # | |||||
| set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) | |||||
| # | |||||
| # add tests | |||||
| # | |||||
| enable_testing() | |||||
| add_subdirectory(tests) | |||||
| @@ -1,12 +0,0 @@ | |||||
| cmake_minimum_required(VERSION 2.8) | |||||
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/..") | |||||
| include(FindUBSan) | |||||
| include(FindTSan) | |||||
| include(FindASan) | |||||
| include(FindMSan) | |||||
| add_executable(test test.cpp) | |||||
| @@ -1,48 +0,0 @@ | |||||
| #include <cstdio> | |||||
| #include <cstdlib> | |||||
| #include <iostream> | |||||
| class BarB | |||||
| { | |||||
| public: | |||||
| float y; | |||||
| /* Include something that uses a virtual function. The symbols | |||||
| that are broken on current OS X libc++ involve this */ | |||||
| virtual int arst(int o) | |||||
| { | |||||
| return 4 + o; | |||||
| } | |||||
| }; | |||||
| static void print_array(const int* a) | |||||
| { | |||||
| for (int i = 0; i < 4; ++i) | |||||
| { | |||||
| std::cout << a[i] << ", "; | |||||
| } | |||||
| std::cout << '\n'; | |||||
| } | |||||
| /* Just include something that ubsan will need to check */ | |||||
| int main(int argc, const char* argv[]) | |||||
| { | |||||
| BarB* b = new BarB(); | |||||
| if (argc > 1) | |||||
| { | |||||
| int uninitialized[4]; | |||||
| //int* uninitialized = new int[4]; | |||||
| print_array(uninitialized); | |||||
| //delete[] uninitialized; | |||||
| int x = atoi(argv[1]); | |||||
| std::cout << (4 / x) << '\n'; | |||||
| fputs(argv[x], stdout); | |||||
| std::cout << b->arst(x) << '\n'; | |||||
| } | |||||
| delete b; | |||||
| return 0; | |||||
| } | |||||
| @@ -0,0 +1,54 @@ | |||||
| # This file is part of CMake-sanitizers. | |||||
| # | |||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| # of this software and associated documentation files (the "Software"), to deal | |||||
| # in the Software without restriction, including without limitation the rights | |||||
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| # copies of the Software, and to permit persons to whom the Software is | |||||
| # furnished to do so, subject to the following conditions: | |||||
| # | |||||
| # The above copyright notice and this permission notice shall be included in all | |||||
| # copies or substantial portions of the Software. | |||||
| # | |||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| # SOFTWARE. | |||||
| # | |||||
| # | |||||
| # Copyright (c) | |||||
| # 2013-2015 Matt Arsenault | |||||
| # 2015 RWTH Aachen University, Federal Republic of Germany | |||||
| # | |||||
| # Function to add testcases. | |||||
| function(add_testcase TESTNAME SOURCEFILES) | |||||
| # remove ${TESTNAME} from ${ARGV} to use ${ARGV} as ${SOURCEFILES} | |||||
| list(REMOVE_AT ARGV 0) | |||||
| # add a new executable | |||||
| add_executable(${TESTNAME} ${ARGV}) | |||||
| # add a testcase for executable | |||||
| add_test(${TESTNAME} ${TESTNAME}) | |||||
| endfunction(add_testcase) | |||||
| # | |||||
| # search for sanitizers | |||||
| # | |||||
| find_package(ASan) | |||||
| find_package(MSan) | |||||
| find_package(TSan) | |||||
| find_package(UBSan) | |||||
| # | |||||
| # add testcases | |||||
| # | |||||
| add_testcase("asan_test_cpp" asan_test.cpp) | |||||
| @@ -0,0 +1,39 @@ | |||||
| /* This file is part of CMake-sanitizers. | |||||
| * | |||||
| * Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| * of this software and associated documentation files (the "Software"), to deal | |||||
| * in the Software without restriction, including without limitation the rights | |||||
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| * copies of the Software, and to permit persons to whom the Software is | |||||
| * furnished to do so, subject to the following conditions: | |||||
| * | |||||
| * The above copyright notice and this permission notice shall be included in | |||||
| * all copies or substantial portions of the Software. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
| * SOFTWARE. | |||||
| * | |||||
| * | |||||
| * Copyright (c) | |||||
| * 2013-2015 Matt Arsenault | |||||
| * 2015 RWTH Aachen University, Federal Republic of Germany | |||||
| */ | |||||
| int | |||||
| main(int argc, char **argv) | |||||
| { | |||||
| // Allocate a new array and delete it. | |||||
| int *array = new int[argc]; | |||||
| delete[] array; | |||||
| /* Access element of the deleted array. This will cause an memory error with | |||||
| * address sanitizer. | |||||
| */ | |||||
| return array[argc]; | |||||
| } | |||||