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/libvformat-1.13/common/types.h Examining data/libvformat-1.13/vf_iface.h Examining data/libvformat-1.13/src/vf_config.h Examining data/libvformat-1.13/src/vf_internals.h Examining data/libvformat-1.13/src/vf_malloc.h Examining data/libvformat-1.13/src/vf_malloc_stdlib.h Examining data/libvformat-1.13/src/vf_modified.h Examining data/libvformat-1.13/src/vf_string_arrays.h Examining data/libvformat-1.13/src/vf_strings.h Examining data/libvformat-1.13/src/vf_access.c Examining data/libvformat-1.13/src/vf_access_calendar.c Examining data/libvformat-1.13/src/vf_access_wrappers.c Examining data/libvformat-1.13/src/vf_create_object.c Examining data/libvformat-1.13/src/vf_delete.c Examining data/libvformat-1.13/src/vf_malloc.c Examining data/libvformat-1.13/src/vf_malloc_stdlib.c Examining data/libvformat-1.13/src/vf_modified.c Examining data/libvformat-1.13/src/vf_reader.c Examining data/libvformat-1.13/src/vf_search.c Examining data/libvformat-1.13/src/vf_string_arrays.c Examining data/libvformat-1.13/src/vf_strings.c Examining data/libvformat-1.13/src/vf_parser.c Examining data/libvformat-1.13/src/vf_writer.c Examining data/libvformat-1.13/vformat/vf_iface.h Examining data/libvformat-1.13/test/testsuppt.c Examining data/libvformat-1.13/test/testsuppt.h Examining data/libvformat-1.13/test/vformat.c Examining data/libvformat-1.13/samples/split_phonebook.c Examining data/libvformat-1.13/samples/split_phonebook.h FINAL RESULTS: data/libvformat-1.13/samples/split_phonebook.c:125:21: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(name, "%s %s", p_givenname, p_familyname); data/libvformat-1.13/samples/split_phonebook.c:130:21: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(name, p_familyname); data/libvformat-1.13/samples/split_phonebook.c:135:21: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(name, p_givenname); data/libvformat-1.13/samples/split_phonebook.c:145:21: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(name, p_fullname); data/libvformat-1.13/samples/split_phonebook.c:153:17: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(filename, "%s\\%s.vcf", p_outdir, name); data/libvformat-1.13/src/vf_strings.c:162:12: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). return strcpy(p_string1, p_string2); data/libvformat-1.13/src/vf_strings.c:229:12: [4] (buffer) strcat: Does not check for buffer overflows when concatenating to destination [MS-banned] (CWE-120). Consider using strcat_s, strncat, strlcat, or snprintf (warning: strncat is easily misused). return strcat(p_string1, p_string2); data/libvformat-1.13/src/vf_writer.c:231:5: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:303:13: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:308:5: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:384:13: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:391:5: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:431: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. fprintf(fp, szEndOfLine); data/libvformat-1.13/src/vf_writer.c:443:21: [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. fprintf(fp, szEndOfLine); data/libvformat-1.13/test/testsuppt.c:129:5: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(pattern, "%s//%s", p_dirname, p_pattern); data/libvformat-1.13/test/testsuppt.c:149:17: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(p_name, "%s//%s", p_enum->p_dirname, p_enum->fd.cFileName); data/libvformat-1.13/test/testsuppt.c:162:13: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(p_name, "%s", p_enum->h.gl_pathv[0]); data/libvformat-1.13/test/testsuppt.c:210:17: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(p_name, "%s//%s", p_enum->p_dirname, p_enum->fd.cFileName); data/libvformat-1.13/test/testsuppt.c:218:13: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(p_name, "%s", p_enum->h.gl_pathv[ts_nextfile++]); data/libvformat-1.13/test/vformat.c:847:5: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(p_outfile, p_infile); data/libvformat-1.13/test/vformat.c:855:9: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(p_found_subscript, p_subscript); data/libvformat-1.13/samples/split_phonebook.c:114:13: [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 name[256]; data/libvformat-1.13/samples/split_phonebook.c:151:17: [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 filename[_MAX_PATH]; data/libvformat-1.13/src/vf_access_calendar.c:141:9: [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 value[256]; data/libvformat-1.13/src/vf_access_calendar.c:145:13: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(value, "%4d%02d%02dT%02d%02d%02d", data/libvformat-1.13/src/vf_access_calendar.c:155:13: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(value, "%4d%02d%02d", data/libvformat-1.13/src/vf_access_calendar.c:497:9: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(p_string + p_strlen(p_string), "%lu%c", (unsigned long)value, symbol); data/libvformat-1.13/src/vf_parser.c:971:13: [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 bytes[3]; data/libvformat-1.13/src/vf_reader.c:166:14: [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). fp = fopen(p_name, "rb"); data/libvformat-1.13/src/vf_reader.c:170:13: [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 buffer[PARSEBUFSIZE]; data/libvformat-1.13/src/vf_reader.c:237:24: [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). FILE *fp = fopen(p_filename, "rb"); data/libvformat-1.13/src/vf_strings.c:419:5: [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(p_destination, p_source, length); data/libvformat-1.13/src/vf_writer.c:176:10: [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). fp = fopen(p_name, "wb"); data/libvformat-1.13/src/vf_writer.c:344:5: [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 quad[5]; data/libvformat-1.13/test/testsuppt.c:127:5: [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 pattern[_MAX_PATH]; data/libvformat-1.13/test/testsuppt.c:353:22: [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). fp = fopen(p_name, "rb"); data/libvformat-1.13/test/vformat.c:123:40: [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. static void check_extract_fields(const char *filename, const char *p_array[3]); data/libvformat-1.13/test/vformat.c:123:62: [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. static void check_extract_fields(const char *filename, const char *p_array[3]); data/libvformat-1.13/test/vformat.c:139:14: [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. static const char *pp_tel_fields[3] = data/libvformat-1.13/test/vformat.c:220:5: [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 filename[_MAX_PATH]; data/libvformat-1.13/test/vformat.c:271:9: [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 outfile_1[_MAX_PATH]; data/libvformat-1.13/test/vformat.c:272:9: [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 outfile_2[_MAX_PATH]; data/libvformat-1.13/test/vformat.c:332:5: [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 title[LINELENGTH]; data/libvformat-1.13/test/vformat.c:336:5: [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(title + 2, filename, strlen(filename)); data/libvformat-1.13/test/vformat.c:431:5: [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 buffer[80]; data/libvformat-1.13/test/vformat.c:449:5: [2] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. Risk is low because the source has a constant maximum length. sprintf(buffer, "[%d tests, %d errors, %d warnings]", data/libvformat-1.13/test/vformat.c:472:11: [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. const char *filename, data/libvformat-1.13/test/vformat.c:473:11: [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. const char *p_array[3] data/libvformat-1.13/test/vformat.c:644:5: [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 buffer[MAXBASE64ENC+1]; data/libvformat-1.13/test/vformat.c:778:9: [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 sz[256]; data/libvformat-1.13/src/vf_reader.c:178:33: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). charsread = read(fileno(fp), buffer, sizeof(buffer)); data/libvformat-1.13/src/vf_reader.c:241:41: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if ((int)buf.st_size == read(fileno(fp), p_data, buf.st_size)) data/libvformat-1.13/src/vf_strings.c:127:12: [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). return strlen(p_string); data/libvformat-1.13/test/testsuppt.c:357:44: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if (p->size == (size_t)read(fileno(fp), p->p_data, p->size)) data/libvformat-1.13/test/vformat.c:336:33: [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). memcpy(title + 2, filename, strlen(filename)); ANALYSIS SUMMARY: Hits = 55 Lines analyzed = 10643 in approximately 0.37 seconds (28382 lines/second) Physical Source Lines of Code (SLOC) = 4203 Hits@level = [0] 44 [1] 5 [2] 29 [3] 0 [4] 21 [5] 0 Hits@level+ = [0+] 99 [1+] 55 [2+] 50 [3+] 21 [4+] 21 [5+] 0 Hits/KSLOC@level+ = [0+] 23.5546 [1+] 13.0859 [2+] 11.8963 [3+] 4.99643 [4+] 4.99643 [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.