mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			107 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
| 
											7 years ago
										 | #!/usr/bin/env python | ||
|  | # -*- coding: utf-8 -*- | ||
|  | 
 | ||
|  | import os | ||
|  | import sys | ||
|  | import subprocess  | ||
|  | import datetime | ||
|  | import argparse | ||
|  | import commands | ||
|  | import re | ||
|  | 
 | ||
|  | git_repo_path = os.path.abspath(subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).strip()) | ||
|  | 
 | ||
|  | string_h_functions = [ | ||
|  |         "memchr", | ||
|  |         "memcmp", | ||
|  |         "memcpy", | ||
|  |         "memmove", | ||
|  |         "memset", | ||
|  |         "strcat", | ||
|  |         "strchr", | ||
|  |         "strcmp", | ||
|  |         "strcoll", | ||
|  |         "strcpy", | ||
|  |         "strcspn", | ||
|  |         "strerror", | ||
|  |         "strlen", | ||
|  |         "strncat", | ||
|  |         "strncmp", | ||
|  |         "strncpy", | ||
|  |         "strpbrk", | ||
|  |         "strrchr", | ||
|  |         "strspn", | ||
|  |         "strstr", | ||
|  |         "strtok", | ||
|  |         "strxfrm", | ||
|  |         "strtok_r", | ||
|  |         "strerror_r", | ||
|  |         "strdup", | ||
|  |         "memccpy", | ||
|  |         "stpcpy", | ||
|  |         "stpncpy", | ||
|  |         "strndup", | ||
|  |         "strnlen", | ||
|  |         "strsignal", | ||
|  |         "memset_s", | ||
|  |         "memmem", | ||
|  |         "memset_pattern4", | ||
|  |         "memset_pattern8", | ||
|  |         "memset_pattern16", | ||
|  |         "strcasestr", | ||
|  |         "strnstr", | ||
|  |         "strlcat", | ||
|  |         "strlcpy", | ||
|  |         "strmode", | ||
|  |         "strsep", | ||
|  |         "swab", | ||
|  |         "timingsafe_bcmp", | ||
|  |     ] | ||
|  | 
 | ||
|  | 
 | ||
|  | def process_if_appropriate(file_path): | ||
|  |     file_ext = os.path.splitext(file_path)[1] | ||
|  |     if file_ext.lower() not in ('.c', '.cpp', '.m', '.mm', '.h', '.swift'): | ||
|  |         return | ||
|  |     # print 'file_path', file_path, 'file_ext', file_ext | ||
|  |      | ||
|  |     with open(file_path, 'rt') as f: | ||
|  |         text = f.read() | ||
|  | 
 | ||
|  |     has_match = False | ||
|  |     for string_h_function in string_h_functions: | ||
|  |         regex = re.compile(string_h_function + r'\s*\(') | ||
|  |         assert(regex) | ||
|  |         matches = [] | ||
|  |         for match in regex.finditer(text): | ||
|  |             matches.append(match) | ||
|  |         # matches = regex.findall(text) | ||
|  |         if not matches: | ||
|  |             continue | ||
|  |         if not has_match: | ||
|  |             has_match = True | ||
|  |             print 'file_path', file_path, 'file_ext', file_ext | ||
|  |         for match in matches: | ||
|  |             # print 'match', match, type(match) | ||
|  |             print '\t', 'match:', match.group(0) | ||
|  |     if has_match: | ||
|  |         print | ||
|  |      | ||
|  |      | ||
|  | if __name__ == "__main__": | ||
|  |      | ||
|  |     parser = argparse.ArgumentParser(description='Precommit script.') | ||
|  |     parser.add_argument('--path', help='used to specify a path to process.') | ||
|  |     args = parser.parse_args() | ||
|  |      | ||
|  |      | ||
|  |     if args.path: | ||
|  |         dir_path = args.path | ||
|  |     else: | ||
|  |         dir_path = git_repo_path | ||
|  | 
 | ||
|  |     for rootdir, dirnames, filenames in os.walk(dir_path): | ||
|  |         for filename in filenames: | ||
|  |             file_path = os.path.abspath(os.path.join(rootdir, filename)) | ||
|  |             process_if_appropriate(file_path) |