mirror of https://github.com/oxen-io/session-ios
				
				
				
			String.h audit.
							parent
							
								
									e56abeac39
								
							
						
					
					
						commit
						79c25981b1
					
				@ -0,0 +1,106 @@
 | 
			
		||||
#!/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)
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue