Merge pull request #20 from 9fcc/shortest-ext
Fix language detection with file names containing more than one dot
This commit is contained in:
		@@ -24,7 +24,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Helper function to get the language of a source file.
 | 
					# Helper function to get the language of a source file.
 | 
				
			||||||
function (sanitizer_lang_of_source FILE RETURN_VAR)
 | 
					function (sanitizer_lang_of_source FILE RETURN_VAR)
 | 
				
			||||||
    get_filename_component(FILE_EXT "${FILE}" EXT)
 | 
					    get_filename_component(LONGEST_EXT "${FILE}" EXT)
 | 
				
			||||||
 | 
					    # Get shortest extension as some files can have dot in their names
 | 
				
			||||||
 | 
					    string(REGEX REPLACE "^.*(\\.[^.]+)$" "\\1" FILE_EXT ${LONGEST_EXT})
 | 
				
			||||||
    string(TOLOWER "${FILE_EXT}" FILE_EXT)
 | 
					    string(TOLOWER "${FILE_EXT}" FILE_EXT)
 | 
				
			||||||
    string(SUBSTRING "${FILE_EXT}" 1 -1 FILE_EXT)
 | 
					    string(SUBSTRING "${FILE_EXT}" 1 -1 FILE_EXT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,22 +31,37 @@ function(add_testcase TESTNAME SOURCEFILES)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	# add a new executable
 | 
						# add a new executable
 | 
				
			||||||
	add_executable(${TESTNAME} ${ARGV})
 | 
						add_executable(${TESTNAME} ${ARGV})
 | 
				
			||||||
	add_sanitizers(${TESTNAME})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# add a testcase for executable
 | 
						# add a testcase for executable
 | 
				
			||||||
	add_test(${TESTNAME} ${TESTNAME})
 | 
						add_test(${TESTNAME} ${TESTNAME})
 | 
				
			||||||
endfunction(add_testcase)
 | 
					endfunction(add_testcase)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Function to add testcases with asan enabled.
 | 
				
			||||||
 | 
					function(add_sanitized_testcase TESTNAME SOURCEFILES)
 | 
				
			||||||
 | 
						add_testcase(${TESTNAME} ${SOURCEFILES})
 | 
				
			||||||
 | 
						add_sanitizers(${TESTNAME})
 | 
				
			||||||
 | 
					endfunction(add_sanitized_testcase)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(SANITIZE_ADDRESS TRUE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# search for sanitizers
 | 
					# search for sanitizers
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
find_package(Sanitizers)
 | 
					find_package(Sanitizers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# add testcases
 | 
					# add testcases
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
add_testcase("asan_test_cpp" asan_test.cpp)
 | 
					add_sanitized_testcase("asan_test_cpp" asan_test.cpp)
 | 
				
			||||||
 | 
					add_sanitized_testcase("shortest_ext_test_cpp" shortest.ext.test.cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set_tests_properties(
 | 
				
			||||||
 | 
						"asan_test_cpp"
 | 
				
			||||||
 | 
						"shortest_ext_test_cpp"
 | 
				
			||||||
 | 
					PROPERTIES
 | 
				
			||||||
 | 
						WILL_FAIL TRUE
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,8 @@ int
 | 
				
			|||||||
main(int argc, char **argv)
 | 
					main(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Allocate a new array and delete it.
 | 
						// Allocate a new array and delete it.
 | 
				
			||||||
	int *array = new int[argc];
 | 
						int *array = new int[argc + 1];
 | 
				
			||||||
 | 
						array[argc] = 0;
 | 
				
			||||||
	delete[] array;
 | 
						delete[] array;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Access element of the deleted array. This will cause an memory error with
 | 
						/* Access element of the deleted array. This will cause an memory error with
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								tests/shortest.ext.test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								tests/shortest.ext.test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					/* 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 + 1];
 | 
				
			||||||
 | 
						array[argc] = 0;
 | 
				
			||||||
 | 
						delete[] array;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Access element of the deleted array. This will cause an memory error with
 | 
				
			||||||
 | 
						 * address sanitizer.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						return array[argc];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user