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/xmms2-scrobbler-0.4.0/src/strbuf.c Examining data/xmms2-scrobbler-0.4.0/src/list.h Examining data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c Examining data/xmms2-scrobbler-0.4.0/src/queue.h Examining data/xmms2-scrobbler-0.4.0/src/submission.c Examining data/xmms2-scrobbler-0.4.0/src/strbuf.h Examining data/xmms2-scrobbler-0.4.0/src/md5.h Examining data/xmms2-scrobbler-0.4.0/src/queue.c Examining data/xmms2-scrobbler-0.4.0/src/submission.h Examining data/xmms2-scrobbler-0.4.0/src/list.c Examining data/xmms2-scrobbler-0.4.0/src/md5.c FINAL RESULTS: data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:185:2: [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 (server->session_id, ptr); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:207:2: [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 (server->np_url, ptr); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:229:2: [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 (server->subm_url, ptr); data/xmms2-scrobbler-0.4.0/src/md5.c:192: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 (p, buf, len); data/xmms2-scrobbler-0.4.0/src/md5.c:196:3: [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, buf, t); data/xmms2-scrobbler-0.4.0/src/md5.c:205:3: [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 (ctx->in, buf, 64); data/xmms2-scrobbler-0.4.0/src/md5.c:213: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 (ctx->in, buf, len); data/xmms2-scrobbler-0.4.0/src/md5.c:258: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 (digest, ctx->buf, 16); data/xmms2-scrobbler-0.4.0/src/md5.c:262: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. md5 (const char *input, char output[33]) data/xmms2-scrobbler-0.4.0/src/md5.c:262:25: [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. md5 (const char *input, char output[33]) data/xmms2-scrobbler-0.4.0/src/md5.h:27: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. void md5 (const char *input, char output[33]); data/xmms2-scrobbler-0.4.0/src/md5.h:27:30: [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. void md5 (const char *input, char output[33]); data/xmms2-scrobbler-0.4.0/src/strbuf.c:86: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 (sb->buf + sb->length, other, len + 1); data/xmms2-scrobbler-0.4.0/src/strbuf.c:93:15: [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 hex[16] = "0123456789abcdef"; data/xmms2-scrobbler-0.4.0/src/submission.c:83:3: [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 buf32[32]; data/xmms2-scrobbler-0.4.0/src/submission.c:85:3: [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 (buf32, "%i", val_i / 1000); data/xmms2-scrobbler-0.4.0/src/submission.c:111: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 buf32[32]; data/xmms2-scrobbler-0.4.0/src/submission.c:150:2: [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 (buf32, "%lu", started_playing); data/xmms2-scrobbler-0.4.0/src/submission.c:161:2: [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 (buf32, "%i", val_i / 1000); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:52: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 name[NAME_MAX + 1]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:54: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 user[64], hashed_password[33]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:55: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 session_id[256], np_url[256], subm_url[256]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:56: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 handshake_url[256]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:76:8: [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 proxy_host[128]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:292: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 hashed[64], post_data[512]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:299: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 (hashed, server->hashed_password, 32); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:660: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 buf[4096]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:681:16: [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). proxy_port = atoi (&line[12]); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:709: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 buf[XMMS_PATH_MAX], config_dir[PATH_MAX], filename[PATH_MAX]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:724:7: [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 (filename, "r"); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:764:8: [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 (filename, "r"); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:789:8: [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 (filename, "r"); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:825: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 buf[XMMS_PATH_MAX]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:826: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 filename[PATH_MAX]; data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:839:7: [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 (filename, "w"); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:899: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 buf[XMMS_PATH_MAX]; data/xmms2-scrobbler-0.4.0/src/md5.c:270:39: [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). md5_update (&ctx, (uint8_t *) input, strlen (input)); data/xmms2-scrobbler-0.4.0/src/strbuf.c:82:8: [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). len = strlen (other); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:90:2: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy (server->name, name, sizeof (server->name)); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:267:22: [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). } else if (total >= strlen ("FAILED ")) { data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:663:19: [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). size_t length = strlen (buf); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:678:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy (proxy_host, &line[7], sizeof (proxy_host)); data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:690:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy (server->handshake_url, &line[15], data/xmms2-scrobbler-0.4.0/src/xmms2-scrobbler.c:694:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy (server->user, &line[6], sizeof (server->user)); ANALYSIS SUMMARY: Hits = 44 Lines analyzed = 1970 in approximately 0.08 seconds (24448 lines/second) Physical Source Lines of Code (SLOC) = 1214 Hits@level = [0] 44 [1] 8 [2] 33 [3] 0 [4] 3 [5] 0 Hits@level+ = [0+] 88 [1+] 44 [2+] 36 [3+] 3 [4+] 3 [5+] 0 Hits/KSLOC@level+ = [0+] 72.4876 [1+] 36.2438 [2+] 29.654 [3+] 2.47117 [4+] 2.47117 [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.