Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler. Number of rules (primarily dangerous function names) in C/C++ ruleset: 223 Examining data/libfwnt-20181227/common/config_msc.h Examining data/libfwnt-20181227/common/byte_stream.h Examining data/libfwnt-20181227/common/common.h Examining data/libfwnt-20181227/common/system_string.h Examining data/libfwnt-20181227/common/types.h Examining data/libfwnt-20181227/common/config_winapi.h Examining data/libfwnt-20181227/common/memory.h Examining data/libfwnt-20181227/common/config.h Examining data/libfwnt-20181227/common/narrow_string.h Examining data/libfwnt-20181227/common/file_stream.h Examining data/libfwnt-20181227/common/config_borlandc.h Examining data/libfwnt-20181227/common/wide_string.h Examining data/libfwnt-20181227/tests/fwnt_test_security_identifier.c Examining data/libfwnt-20181227/tests/fwnt_test_memory.h Examining data/libfwnt-20181227/tests/fwnt_test_support.c Examining data/libfwnt-20181227/tests/fwnt_test_libcnotify.h Examining data/libfwnt-20181227/tests/fwnt_test_access_control_list.c Examining data/libfwnt-20181227/tests/fwnt_test_security_descriptor.c Examining data/libfwnt-20181227/tests/fwnt_test_error.c Examining data/libfwnt-20181227/tests/fwnt_test_lznt1.c Examining data/libfwnt-20181227/tests/fwnt_test_macros.h Examining data/libfwnt-20181227/tests/fwnt_test_unused.h Examining data/libfwnt-20181227/tests/fwnt_test_lzxpress.c Examining data/libfwnt-20181227/tests/fwnt_test_libfwnt.h Examining data/libfwnt-20181227/tests/fwnt_test_access_control_entry.c Examining data/libfwnt-20181227/tests/fwnt_test_libcerror.h Examining data/libfwnt-20181227/tests/fwnt_test_memory.c Examining data/libfwnt-20181227/include/libfwnt/extern.h Examining data/libfwnt-20181227/include/libfwnt/types.h Examining data/libfwnt-20181227/include/libfwnt/features.h Examining data/libfwnt-20181227/include/libfwnt/definitions.h Examining data/libfwnt-20181227/include/libfwnt/error.h Examining data/libfwnt-20181227/include/libfwnt.h Examining data/libfwnt-20181227/libfwnt/libfwnt_debug.c Examining data/libfwnt-20181227/libfwnt/libfwnt_bit_stream.c Examining data/libfwnt-20181227/libfwnt/libfwnt_lznt1.c Examining data/libfwnt-20181227/libfwnt/libfwnt_libcerror.h Examining data/libfwnt-20181227/libfwnt/libfwnt_unused.h Examining data/libfwnt-20181227/libfwnt/libfwnt_support.c Examining data/libfwnt-20181227/libfwnt/libfwnt_lzxpress.h Examining data/libfwnt-20181227/libfwnt/libfwnt_lznt1.h Examining data/libfwnt-20181227/libfwnt/libfwnt_locale_identifier.c Examining data/libfwnt-20181227/libfwnt/libfwnt_libcdata.h Examining data/libfwnt-20181227/libfwnt/libfwnt_definitions.h Examining data/libfwnt-20181227/libfwnt/libfwnt_types.h Examining data/libfwnt-20181227/libfwnt/libfwnt_access_control_list.c Examining data/libfwnt-20181227/libfwnt/libfwnt_locale_identifier.h Examining data/libfwnt-20181227/libfwnt/libfwnt_extern.h Examining data/libfwnt-20181227/libfwnt/libfwnt_support.h Examining data/libfwnt-20181227/libfwnt/libfwnt_security_descriptor.h Examining data/libfwnt-20181227/libfwnt/libfwnt_libcnotify.h Examining data/libfwnt-20181227/libfwnt/libfwnt_security_identifier.h Examining data/libfwnt-20181227/libfwnt/libfwnt_access_control_list.h Examining data/libfwnt-20181227/libfwnt/libfwnt_lzxpress.c Examining data/libfwnt-20181227/libfwnt/libfwnt.c Examining data/libfwnt-20181227/libfwnt/libfwnt_access_control_entry.c Examining data/libfwnt-20181227/libfwnt/libfwnt_security_descriptor.c Examining data/libfwnt-20181227/libfwnt/libfwnt_error.h Examining data/libfwnt-20181227/libfwnt/libfwnt_security_identifier.c Examining data/libfwnt-20181227/libfwnt/libfwnt_error.c Examining data/libfwnt-20181227/libfwnt/libfwnt_bit_stream.h Examining data/libfwnt-20181227/libfwnt/libfwnt_access_control_entry.h Examining data/libfwnt-20181227/libfwnt/libfwnt_debug.h Examining data/libfwnt-20181227/libcthreads/libcthreads_thread_pool.h Examining data/libfwnt-20181227/libcthreads/libcthreads_thread_pool.c Examining data/libfwnt-20181227/libcthreads/libcthreads_repeating_thread.c Examining data/libfwnt-20181227/libcthreads/libcthreads_error.c Examining data/libfwnt-20181227/libcthreads/libcthreads_unused.h Examining data/libfwnt-20181227/libcthreads/libcthreads_condition.h Examining data/libfwnt-20181227/libcthreads/libcthreads_definitions.h Examining data/libfwnt-20181227/libcthreads/libcthreads_thread.h Examining data/libfwnt-20181227/libcthreads/libcthreads_repeating_thread.h Examining data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c Examining data/libfwnt-20181227/libcthreads/libcthreads_mutex.h Examining data/libfwnt-20181227/libcthreads/libcthreads_support.h Examining data/libfwnt-20181227/libcthreads/libcthreads_thread.c Examining data/libfwnt-20181227/libcthreads/libcthreads_mutex.c Examining data/libfwnt-20181227/libcthreads/libcthreads_types.h Examining data/libfwnt-20181227/libcthreads/libcthreads_lock.h Examining data/libfwnt-20181227/libcthreads/libcthreads_extern.h Examining data/libfwnt-20181227/libcthreads/libcthreads_error.h Examining data/libfwnt-20181227/libcthreads/libcthreads_queue.c Examining data/libfwnt-20181227/libcthreads/libcthreads_condition.c Examining data/libfwnt-20181227/libcthreads/libcthreads_thread_attributes.c Examining data/libfwnt-20181227/libcthreads/libcthreads_libcerror.h Examining data/libfwnt-20181227/libcthreads/libcthreads_lock.c Examining data/libfwnt-20181227/libcthreads/libcthreads_support.c Examining data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.h Examining data/libfwnt-20181227/libcthreads/libcthreads_thread_attributes.h Examining data/libfwnt-20181227/libcthreads/libcthreads_queue.h Examining data/libfwnt-20181227/libcerror/libcerror_system.c Examining data/libfwnt-20181227/libcerror/libcerror_error.c Examining data/libfwnt-20181227/libcerror/libcerror_extern.h Examining data/libfwnt-20181227/libcerror/libcerror_error.h Examining data/libfwnt-20181227/libcerror/libcerror_support.h Examining data/libfwnt-20181227/libcerror/libcerror_types.h Examining data/libfwnt-20181227/libcerror/libcerror_definitions.h Examining data/libfwnt-20181227/libcerror/libcerror_unused.h Examining data/libfwnt-20181227/libcerror/libcerror_support.c Examining data/libfwnt-20181227/libcerror/libcerror_system.h Examining data/libfwnt-20181227/libcnotify/libcnotify_libcerror.h Examining data/libfwnt-20181227/libcnotify/libcnotify_unused.h Examining data/libfwnt-20181227/libcnotify/libcnotify_support.h Examining data/libfwnt-20181227/libcnotify/libcnotify_support.c Examining data/libfwnt-20181227/libcnotify/libcnotify_print.c Examining data/libfwnt-20181227/libcnotify/libcnotify_verbose.c Examining data/libfwnt-20181227/libcnotify/libcnotify_stream.h Examining data/libfwnt-20181227/libcnotify/libcnotify_extern.h Examining data/libfwnt-20181227/libcnotify/libcnotify_stream.c Examining data/libfwnt-20181227/libcnotify/libcnotify_print.h Examining data/libfwnt-20181227/libcnotify/libcnotify_verbose.h Examining data/libfwnt-20181227/libcnotify/libcnotify_definitions.h Examining data/libfwnt-20181227/libcdata/libcdata_array.c Examining data/libfwnt-20181227/libcdata/libcdata_tree_node.c Examining data/libfwnt-20181227/libcdata/libcdata_libcthreads.h Examining data/libfwnt-20181227/libcdata/libcdata_range_list_value.h Examining data/libfwnt-20181227/libcdata/libcdata_unused.h Examining data/libfwnt-20181227/libcdata/libcdata_range_list.h Examining data/libfwnt-20181227/libcdata/libcdata_range_list.c Examining data/libfwnt-20181227/libcdata/libcdata_extern.h Examining data/libfwnt-20181227/libcdata/libcdata_support.c Examining data/libfwnt-20181227/libcdata/libcdata_list_element.h Examining data/libfwnt-20181227/libcdata/libcdata_range_list_value.c Examining data/libfwnt-20181227/libcdata/libcdata_libcerror.h Examining data/libfwnt-20181227/libcdata/libcdata_error.c Examining data/libfwnt-20181227/libcdata/libcdata_error.h Examining data/libfwnt-20181227/libcdata/libcdata_support.h Examining data/libfwnt-20181227/libcdata/libcdata_list.c Examining data/libfwnt-20181227/libcdata/libcdata_tree_node.h Examining data/libfwnt-20181227/libcdata/libcdata_list.h Examining data/libfwnt-20181227/libcdata/libcdata_types.h Examining data/libfwnt-20181227/libcdata/libcdata_list_element.c Examining data/libfwnt-20181227/libcdata/libcdata_array.h Examining data/libfwnt-20181227/libcdata/libcdata_btree.h Examining data/libfwnt-20181227/libcdata/libcdata_definitions.h Examining data/libfwnt-20181227/libcdata/libcdata_btree.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_error.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_integer.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_list.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_python.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_integer.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_entries.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_entry.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_entry.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_types.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_libfwnt.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_unused.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_list.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_types.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_security_descriptor.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_security_identifier.c Examining data/libfwnt-20181227/pyfwnt/pyfwnt_access_control_entries.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_libcerror.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_security_identifier.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_error.h Examining data/libfwnt-20181227/pyfwnt/pyfwnt_security_descriptor.h FINAL RESULTS: data/libfwnt-20181227/common/file_stream.h:139:2: [4] (format) vfprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. vfprintf data/libfwnt-20181227/common/file_stream.h:143:2: [4] (format) vfprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. vfprintf( stream, format, __VA_ARGS__ ) data/libfwnt-20181227/common/narrow_string.h:148:2: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. snprintf data/libfwnt-20181227/common/narrow_string.h:152:2: [4] (format) snprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. snprintf( target, size, __VA_ARGS__ ) data/libfwnt-20181227/common/narrow_string.h:159:2: [4] (buffer) sscanf: The scanf() family's %s operation, without a limit specification, permits buffer overflows (CWE-120, CWE-20). Specify a limit to %s, or use a different input function. sscanf data/libfwnt-20181227/common/narrow_string.h:163:2: [4] (buffer) sscanf: The scanf() family's %s operation, without a limit specification, permits buffer overflows (CWE-120, CWE-20). Specify a limit to %s, or use a different input function. If the scanf format is influenceable by an attacker, it's exploitable. sscanf( string, format, __VA_ARGS__ ) data/libfwnt-20181227/common/narrow_string.h:174:2: [4] (format) vsnprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. vsnprintf data/libfwnt-20181227/common/narrow_string.h:178:2: [4] (format) vsnprintf: If format strings can be influenced by an attacker, they can be exploited, and note that sprintf variations do not always \0-terminate (CWE-134). Use a constant for the format specification. vsnprintf( string, size, format, __VA_ARGS__ ) data/libfwnt-20181227/common/system_string.h:37:25: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. #error Unsupported wide system character size data/libfwnt-20181227/common/wide_string.h:151:2: [4] (format) swprintf: Potential format string problem (CWE-134). Make format string constant. swprintf( target, size, __VA_ARGS__ ) data/libfwnt-20181227/common/wide_string.h:166:2: [4] (format) vswprintf: Potential format string problem (CWE-134). Make format string constant. vswprintf( string, size, format, __VA_ARGS__ ) data/libfwnt-20181227/include/libfwnt/types.h:94:16: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. #error Missing system type definitions (sys/types.h) data/libfwnt-20181227/libcerror/libcerror_error.c:526:17: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. print_count = fprintf( data/libfwnt-20181227/libcerror/libcerror_error.c:681:18: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. print_count = fprintf( data/libfwnt-20181227/libcerror/libcerror_system.c:338:32: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. #error Missing error to string system function data/libfwnt-20181227/libcerror/libcerror_system.c:91:19: [3] (misc) LoadLibrary: Ensure that the full path to the library is specified, or current directory may be used (CWE-829, CWE-20). Use registry entry or GetWindowsDirectory to find library path, if you aren't already. library_handle = LoadLibrary( data/libfwnt-20181227/libcerror/libcerror_system.c:144:19: [3] (misc) LoadLibrary: Ensure that the full path to the library is specified, or current directory may be used (CWE-829, CWE-20). Use registry entry or GetWindowsDirectory to find library path, if you aren't already. library_handle = LoadLibrary( data/libfwnt-20181227/libcthreads/libcthreads_condition.c:119:2: [3] (misc) InitializeCriticalSection: Exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. InitializeCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_condition.c:377:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_condition.c:497:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_condition.c:622:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_condition.c:650:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_lock.c:107:2: [3] (misc) InitializeCriticalSection: Exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. InitializeCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_lock.c:268:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_mutex.c:114:2: [3] (misc) InitializeCriticalSection: Exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. InitializeCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_mutex.c:294:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:118:2: [3] (misc) InitializeCriticalSection: Exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. InitializeCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:121:2: [3] (misc) InitializeCriticalSection: Exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. InitializeCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:346:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:349:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:472:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.c:570:2: [3] (misc) EnterCriticalSection: On some versions of Windows, exceptions can be thrown in low-memory situations. Use InitializeCriticalSectionAndSpinCount instead. EnterCriticalSection( data/libfwnt-20181227/common/file_stream.h:62:2: [2] (misc) fopen: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents? (CWE-362). fopen( filename, mode ) data/libfwnt-20181227/common/memory.h:109:2: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. memcpy( (void *) destination, (void *) source, count ) data/libfwnt-20181227/common/narrow_string.h:100:11: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. (char *) memcpy( (void *) destination, (void *) source, size ) data/libfwnt-20181227/pyfwnt/pyfwnt_error.c:69:2: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char error_string[ PYFWNT_ERROR_STRING_SIZE ]; data/libfwnt-20181227/pyfwnt/pyfwnt_error.c:209:2: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char error_string[ PYFWNT_ERROR_STRING_SIZE ]; data/libfwnt-20181227/pyfwnt/pyfwnt_error.c:339:2: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char error_string[ PYFWNT_ERROR_STRING_SIZE ]; data/libfwnt-20181227/pyfwnt/pyfwnt_error.c:340:2: [2] (buffer) char: Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. char exception_string[ PYFWNT_ERROR_STRING_SIZE ]; data/libfwnt-20181227/tests/fwnt_test_memory.c:83:7: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. void *memcpy( data/libfwnt-20181227/common/narrow_string.h:59:2: [1] (buffer) strlen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). strlen( string ) data/libfwnt-20181227/common/narrow_string.h:104:2: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy( destination, source, size ) data/libfwnt-20181227/common/wide_string.h:60:2: [1] (buffer) wcslen: Does not handle strings that are not \0-terminated; if given one it may perform an over-read (it could cause a crash if unprotected) (CWE-126). wcslen( string ) data/libfwnt-20181227/common/wide_string.h:101:2: [1] (buffer) wcsncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). wcsncpy( destination, source, size ) data/libfwnt-20181227/libcthreads/libcthreads_read_write_lock.h:78:16: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). #error Missing read/write lock type ANALYSIS SUMMARY: Hits = 45 Lines analyzed = 51349 in approximately 1.03 seconds (49864 lines/second) Physical Source Lines of Code (SLOC) = 38064 Hits@level = [0] 31 [1] 5 [2] 8 [3] 17 [4] 15 [5] 0 Hits@level+ = [0+] 76 [1+] 45 [2+] 40 [3+] 32 [4+] 15 [5+] 0 Hits/KSLOC@level+ = [0+] 1.99664 [1+] 1.18222 [2+] 1.05086 [3+] 0.840689 [4+] 0.394073 [5+] 0 Dot directories skipped = 1 (--followdotdir overrides) Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! See 'Secure Programming HOWTO' (https://dwheeler.com/secure-programs) for more information.