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/xinv3d-1.3.6/aliens.c Examining data/xinv3d-1.3.6/camera.c Examining data/xinv3d-1.3.6/camera.h Examining data/xinv3d-1.3.6/defines.h Examining data/xinv3d-1.3.6/effects.c Examining data/xinv3d-1.3.6/externs.h Examining data/xinv3d-1.3.6/game.c Examining data/xinv3d-1.3.6/game.h Examining data/xinv3d-1.3.6/main-dos.c Examining data/xinv3d-1.3.6/main-w.c Examining data/xinv3d-1.3.6/main-x11.c Examining data/xinv3d-1.3.6/mat4x4.c Examining data/xinv3d-1.3.6/mat4x4.h Examining data/xinv3d-1.3.6/object.c Examining data/xinv3d-1.3.6/object.h Examining data/xinv3d-1.3.6/player.c Examining data/xinv3d-1.3.6/system.h Examining data/xinv3d-1.3.6/vec4x1.c Examining data/xinv3d-1.3.6/vec4x1.h Examining data/xinv3d-1.3.6/gtext.h FINAL RESULTS: data/xinv3d-1.3.6/main-w.c:477:3: [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). strcat(message, *gameInfo); data/xinv3d-1.3.6/main-w.c:482:3: [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). strcat(message, append); data/xinv3d-1.3.6/game.c:144:4: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand ( time( NULL ) ); data/xinv3d-1.3.6/game.c:167:4: [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[256], tmp_num[2]; data/xinv3d-1.3.6/game.c:175:4: [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, "%ld", gv->hi_score ); data/xinv3d-1.3.6/game.c:181:29: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). tmp_score[i] = NUMBER[atoi(tmp_num)]; data/xinv3d-1.3.6/game.c:325:4: [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[256], tmp_num[2]; data/xinv3d-1.3.6/game.c:333:10: [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, "FPS:%3.0f:(%1.3f):ms(%ld)", gv->fps, data/xinv3d-1.3.6/game.c:337:10: [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, "FPS: n/a" ); data/xinv3d-1.3.6/game.c:343:4: [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, "%ld", gv->pscore ); data/xinv3d-1.3.6/game.c:349:29: [2] (integer) atoi: Unless checked, the resulting number can exceed the expected range (CWE-190). If source untrusted, check both minimum and maximum, even if the input had no minus sign (large numbers can roll over into negative number; consider saving to an unsigned value if that is intended). tmp_score[i] = NUMBER[atoi(tmp_num)]; data/xinv3d-1.3.6/game.c:364:7: [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, "Lives: %d", gv->plives-1 ); data/xinv3d-1.3.6/game.c:370:4: [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, "Time: %10.0fs", (double)gv->sw_t/1000); data/xinv3d-1.3.6/game.c:373:4: [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, "U: %d D: %d L: %d R: %d F: %d", data/xinv3d-1.3.6/main-w.c:474: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 message[16384]; data/xinv3d-1.3.6/main-w.c:478:3: [2] (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). Risk is low because the source is a constant string. strcat(message, "\r\n"); data/xinv3d-1.3.6/mat4x4.c:49:4: [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 ( b, a, sizeof ( MATRIX4 ) ); data/xinv3d-1.3.6/vec4x1.c:51:4: [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 ( b, a, sizeof ( VECTOR4 ) ); data/xinv3d-1.3.6/game.c:183:14: [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). tmp_score[strlen(buffer)] = NULL; data/xinv3d-1.3.6/game.c:351:14: [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). tmp_score[strlen(buffer)] = NULL; data/xinv3d-1.3.6/main-w.c:161:17: [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). menuitem.cch = strlen("&About xinv3d"); data/xinv3d-1.3.6/main-w.c:172:17: [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). menuitem.cch = strlen("&How to Play"); data/xinv3d-1.3.6/main-w.c:350:5: [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(message)); data/xinv3d-1.3.6/main-w.c:475:2: [1] (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). Risk is low because the source is a constant character. strcpy(message, ""); data/xinv3d-1.3.6/main-x11.c:424:27: [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). message, strlen ( message ) ); ANALYSIS SUMMARY: Hits = 25 Lines analyzed = 5486 in approximately 0.15 seconds (37128 lines/second) Physical Source Lines of Code (SLOC) = 3678 Hits@level = [0] 25 [1] 7 [2] 15 [3] 1 [4] 2 [5] 0 Hits@level+ = [0+] 50 [1+] 25 [2+] 18 [3+] 3 [4+] 2 [5+] 0 Hits/KSLOC@level+ = [0+] 13.5943 [1+] 6.79717 [2+] 4.89396 [3+] 0.815661 [4+] 0.543774 [5+] 0 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.