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/virt-viewer-9.0/tests/test-hotkeys.c Examining data/virt-viewer-9.0/tests/test-monitor-mapping.c Examining data/virt-viewer-9.0/tests/redirect-test.c Examining data/virt-viewer-9.0/tests/test-monitor-alignment.c Examining data/virt-viewer-9.0/tests/test-version-compare.c Examining data/virt-viewer-9.0/src/virt-viewer-display.c Examining data/virt-viewer-9.0/src/remote-viewer-main.c Examining data/virt-viewer-9.0/src/virt-viewer-display-spice.h Examining data/virt-viewer-9.0/src/remote-viewer.c Examining data/virt-viewer-9.0/src/glib-compat.c Examining data/virt-viewer-9.0/src/virt-viewer-vm-connection.c Examining data/virt-viewer-9.0/src/virt-viewer-session-vnc.h Examining data/virt-viewer-9.0/src/ovirt-foreign-menu.h Examining data/virt-viewer-9.0/src/remote-viewer.h Examining data/virt-viewer-9.0/src/virt-viewer-session-spice.h Examining data/virt-viewer-9.0/src/remote-viewer-connect.c Examining data/virt-viewer-9.0/src/virt-viewer-display-vte.h Examining data/virt-viewer-9.0/src/virt-viewer-enums.c Examining data/virt-viewer-9.0/src/remote-viewer-iso-list-dialog.h Examining data/virt-viewer-9.0/src/virt-viewer-window.h Examining data/virt-viewer-9.0/src/virt-viewer-file-transfer-dialog.c Examining data/virt-viewer-9.0/src/glib-compat.h Examining data/virt-viewer-9.0/src/virt-viewer-resources.h Examining data/virt-viewer-9.0/src/virt-viewer-timed-revealer.h Examining data/virt-viewer-9.0/src/virt-viewer-session-vnc.c Examining data/virt-viewer-9.0/src/virt-viewer-display-vnc.c Examining data/virt-viewer-9.0/src/virt-viewer-auth.c Examining data/virt-viewer-9.0/src/virt-viewer-notebook.c Examining data/virt-viewer-9.0/src/virt-viewer-session-spice.c Examining data/virt-viewer-9.0/src/virt-viewer-notebook.h Examining data/virt-viewer-9.0/src/virt-viewer-auth.h Examining data/virt-viewer-9.0/src/virt-viewer-display-spice.c Examining data/virt-viewer-9.0/src/virt-viewer-util.c Examining data/virt-viewer-9.0/src/virt-viewer-main.c Examining data/virt-viewer-9.0/src/virt-viewer-display.h Examining data/virt-viewer-9.0/src/windows-cmdline-wrapper.c Examining data/virt-viewer-9.0/src/virt-viewer-resources.c Examining data/virt-viewer-9.0/src/ovirt-foreign-menu.c Examining data/virt-viewer-9.0/src/virt-viewer.h Examining data/virt-viewer-9.0/src/virt-viewer-util.h Examining data/virt-viewer-9.0/src/virt-viewer-session.h Examining data/virt-viewer-9.0/src/virt-viewer-app.c Examining data/virt-viewer-9.0/src/virt-viewer-file.h Examining data/virt-viewer-9.0/src/virt-viewer-enums.h Examining data/virt-viewer-9.0/src/virt-viewer-file-transfer-dialog.h Examining data/virt-viewer-9.0/src/virt-viewer-app.h Examining data/virt-viewer-9.0/src/remote-viewer-connect.h Examining data/virt-viewer-9.0/src/virt-viewer-display-vte.c Examining data/virt-viewer-9.0/src/virt-viewer-window.c Examining data/virt-viewer-9.0/src/virt-viewer-file.c Examining data/virt-viewer-9.0/src/virt-viewer-timed-revealer.c Examining data/virt-viewer-9.0/src/remote-viewer-iso-list-dialog.c Examining data/virt-viewer-9.0/src/virt-viewer.c Examining data/virt-viewer-9.0/src/virt-viewer-display-vnc.h Examining data/virt-viewer-9.0/src/virt-viewer-vm-connection.h Examining data/virt-viewer-9.0/src/virt-viewer-session.c FINAL RESULTS: data/virt-viewer-9.0/src/virt-viewer-app.c:701:9: [4] (shell) execvp: 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. execvp("ssh", (char *const*)cmd); data/virt-viewer-9.0/src/virt-viewer-app.c:773: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(addr.sun_path, unixsock); data/virt-viewer-9.0/tests/redirect-test.c:152:12: [3] (shell) CreateProcess: This causes a new process to execute and is difficult to use safely (CWE-78). Specify the application path in the first argument, NOT as part of the second, or embedded spaces could allow an attacker to force a different program to run. assert(CreateProcess(NULL, program, NULL, NULL, inherit, 0, NULL, NULL, &si, &pi)); data/virt-viewer-9.0/tests/redirect-test.c:152:12: [3] (shell) CreateProcess: This causes a new process to execute and is difficult to use safely (CWE-78). Specify the application path in the first argument, NOT as part of the second, or embedded spaces could allow an attacker to force a different program to run. assert(CreateProcess(NULL, program, NULL, NULL, inherit, 0, NULL, NULL, &si, &pi)); data/virt-viewer-9.0/src/virt-viewer-app.c:717: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 *cmd[10]; data/virt-viewer-9.0/src/virt-viewer-app.c:718: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 portstr[50]; data/virt-viewer-9.0/src/virt-viewer-app.c:725: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(portstr, "%d", sshport); data/virt-viewer-9.0/src/virt-viewer.c:366:18: [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. unsigned char uuid[16]; data/virt-viewer-9.0/src/virt-viewer.c:389: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. unsigned char wantuuid[16]; data/virt-viewer-9.0/src/virt-viewer.c:390: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. unsigned char domuuid[16]; data/virt-viewer-9.0/src/virt-viewer.c:872: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 uuid_string[VIR_UUID_STRING_BUFLEN]; data/virt-viewer-9.0/src/windows-cmdline-wrapper.c:55:5: [2] (buffer) TCHAR: 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. TCHAR name[MAX_PATH]; data/virt-viewer-9.0/tests/redirect-test.c:107: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 program[MAX_PATH+128]; data/virt-viewer-9.0/tests/redirect-test.c:110: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(strchr(program, 0) , "\" %d", num_test); data/virt-viewer-9.0/tests/redirect-test.c:157:13: [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). log_f = fopen("log.txt", "a"); data/virt-viewer-9.0/tests/redirect-test.c:170:15: [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 *f = fopen(fn, "r"); data/virt-viewer-9.0/tests/redirect-test.c:174:12: [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 char buf[1024]; data/virt-viewer-9.0/tests/redirect-test.c:233: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 stdout_line[64], stderr_line[64]; data/virt-viewer-9.0/tests/redirect-test.c:235: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(stdout_line, "stdout %d line", num_test); data/virt-viewer-9.0/tests/redirect-test.c:236: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(stderr_line, "stderr %d line", num_test); data/virt-viewer-9.0/tests/redirect-test.c:306: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 *argv[10], *p; data/virt-viewer-9.0/tests/redirect-test.c:314:13: [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). log_f = fopen("log.txt", argc >= 1 ? "a" : "w"); data/virt-viewer-9.0/src/ovirt-foreign-menu.c:1056:54: [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). ca = g_byte_array_new_take((guint8 *)ca_str, strlen(ca_str) + 1); data/virt-viewer-9.0/src/virt-viewer-app.c:503:37: [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). g_snprintf(mappings[i], strlen(mappings[i]) + 1, "%d:%d", data/virt-viewer-9.0/src/virt-viewer-app.c:765:9: [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). if (strlen(unixsock) + 1 > sizeof(addr.sun_path)) { data/virt-viewer-9.0/src/virt-viewer-resources.c:11711:31: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). __pragma(section(".CRT$XCU",read)) \ data/virt-viewer-9.0/src/virt-viewer-resources.c:11719:31: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). __pragma(section(".CRT$XCU",read)) \ data/virt-viewer-9.0/src/virt-viewer-resources.c:11731:22: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). section(".CRT$XCU",read) data/virt-viewer-9.0/src/virt-viewer-resources.c:11738:22: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). section(".CRT$XCU",read) data/virt-viewer-9.0/src/virt-viewer-session-spice.c:570:62: [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). GByteArray *ba = g_byte_array_new_take((guint8 *)ca, strlen(ca) + 1); data/virt-viewer-9.0/src/virt-viewer.c:1020:37: [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). cred[i].resultlen = strlen(cred[i].result); data/virt-viewer-9.0/src/windows-cmdline-wrapper.c:65:9: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). Risk is low because the source is a constant string. strncpy(name + len - 3, "exe", 3); data/virt-viewer-9.0/tests/redirect-test.c:221:25: [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). memmove(p, p+1, strlen(p)); ANALYSIS SUMMARY: Hits = 33 Lines analyzed = 30419 in approximately 1.52 seconds (19955 lines/second) Physical Source Lines of Code (SLOC) = 25383 Hits@level = [0] 16 [1] 11 [2] 18 [3] 2 [4] 2 [5] 0 Hits@level+ = [0+] 49 [1+] 33 [2+] 22 [3+] 4 [4+] 2 [5+] 0 Hits/KSLOC@level+ = [0+] 1.93043 [1+] 1.30008 [2+] 0.866722 [3+] 0.157586 [4+] 0.0787929 [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.