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
		
	
#!/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)
 |