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/jose-10/lib/hsh.h Examining data/jose-10/lib/hooks.c Examining data/jose-10/lib/misc.c Examining data/jose-10/lib/zlib/deflate.c Examining data/jose-10/lib/b64.c Examining data/jose-10/lib/jwe.c Examining data/jose-10/lib/jwk.c Examining data/jose-10/lib/openssl/ecdhes.c Examining data/jose-10/lib/openssl/ecdsa.c Examining data/jose-10/lib/openssl/misc.c Examining data/jose-10/lib/openssl/jwk.c Examining data/jose-10/lib/openssl/aesgcm.c Examining data/jose-10/lib/openssl/dir.c Examining data/jose-10/lib/openssl/oct.c Examining data/jose-10/lib/openssl/aesgcmkw.c Examining data/jose-10/lib/openssl/aescbch.c Examining data/jose-10/lib/openssl/ecdh.c Examining data/jose-10/lib/openssl/hash.c Examining data/jose-10/lib/openssl/hmac.c Examining data/jose-10/lib/openssl/aeskw.c Examining data/jose-10/lib/openssl/rsa.c Examining data/jose-10/lib/openssl/lock.c Examining data/jose-10/lib/openssl/compat.c Examining data/jose-10/lib/openssl/compat.h Examining data/jose-10/lib/openssl/pbes2.c Examining data/jose-10/lib/openssl/misc.h Examining data/jose-10/lib/openssl/rsassa.c Examining data/jose-10/lib/openssl/ec.c Examining data/jose-10/lib/openssl/ecmr.c Examining data/jose-10/lib/openssl/rsaes.c Examining data/jose-10/lib/cfg.c Examining data/jose-10/lib/hsh.c Examining data/jose-10/lib/misc.h Examining data/jose-10/lib/jws.c Examining data/jose-10/lib/hooks.h Examining data/jose-10/lib/io.c Examining data/jose-10/cmd/jwe/dec.c Examining data/jose-10/cmd/jwe/enc.c Examining data/jose-10/cmd/jwe/jwe.h Examining data/jose-10/cmd/jwe/fmt.c Examining data/jose-10/cmd/jwe/pwd.h Examining data/jose-10/cmd/jose.h Examining data/jose-10/cmd/jose.c Examining data/jose-10/cmd/jws/ver.c Examining data/jose-10/cmd/jws/sig.c Examining data/jose-10/cmd/jws/jws.h Examining data/jose-10/cmd/jws/fmt.c Examining data/jose-10/cmd/alg.c Examining data/jose-10/cmd/jwk/use.c Examining data/jose-10/cmd/jwk/eql.c Examining data/jose-10/cmd/jwk/thp.c Examining data/jose-10/cmd/jwk/jwk.h Examining data/jose-10/cmd/jwk/exc.c Examining data/jose-10/cmd/jwk/gen.c Examining data/jose-10/cmd/jwk/pub.c Examining data/jose-10/cmd/b64/b64.h Examining data/jose-10/cmd/b64/dec.c Examining data/jose-10/cmd/b64/enc.c Examining data/jose-10/cmd/fmt.c Examining data/jose-10/tests/alg_comp.c Examining data/jose-10/tests/alg_sign.c Examining data/jose-10/tests/api_jws.c Examining data/jose-10/tests/alg_wrap.c Examining data/jose-10/tests/api_jwe.c Examining data/jose-10/tests/api_b64.c Examining data/jose-10/tests/alg_encr.c Examining data/jose-10/tests/alg_hash.c Examining data/jose-10/jose/jose.h Examining data/jose-10/jose/b64.h Examining data/jose-10/jose/io.h Examining data/jose-10/jose/jwk.h Examining data/jose-10/jose/jws.h Examining data/jose-10/jose/openssl.h Examining data/jose-10/jose/cfg.h Examining data/jose-10/jose/jwe.h FINAL RESULTS: data/jose-10/cmd/fmt.c:30:9: [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. #define sscanf __mingw_sscanf data/jose-10/cmd/jose.c:507:13: [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(cmd, name); data/jose-10/jose/cfg.h:129:28: [4] (format) printf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. void __attribute__((format(printf, 5, 6))) data/jose-10/lib/cfg.c:71:5: [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(stderr, fmt, ap); data/jose-10/tests/alg_hash.c:23:9: [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. #define sscanf __mingw_sscanf data/jose-10/tests/api_b64.c:26:9: [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. #define fprintf __mingw_fprintf data/jose-10/cmd/jose.c:128:22: [3] (buffer) getopt_long: Some older implementations do not protect against internal buffer overflows (CWE-120, CWE-20). Check implementation on installation, or limit the size of all string inputs. for (int c; (c = getopt_long(argc, argv, sopts, lopts, NULL)) >= 0; ) { data/jose-10/cmd/alg.c:136: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 *names[len]; data/jose-10/cmd/fmt.c:73:16: [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 = fopen(s, "w"); data/jose-10/cmd/fmt.c:105:16: [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 = fopen(s, "w"); data/jose-10/cmd/fmt.c:151:12: [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 = fopen(s, "w"); data/jose-10/cmd/jose.c:106: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 sopts[ncfgs * 3 + 3]; data/jose-10/cmd/jose.c:116:5: [2] (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 string. strcpy(sopts, "hv"); data/jose-10/cmd/jose.c:237:25: [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). io->input = fopen(arg, "r"); data/jose-10/cmd/jose.c:268:17: [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 = fopen(arg, "r"); data/jose-10/cmd/jose.c:281:17: [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 = fopen(arg, "w"); data/jose-10/cmd/jose.c:313:31: [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_AUTO *file = fopen(arg, "r"); data/jose-10/cmd/jose.c:336:31: [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_AUTO *file = fopen(arg, "r"); data/jose-10/cmd/jose.c:366:27: [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_AUTO *file = fopen(arg, "r"); data/jose-10/cmd/jose.c:482: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 full[40] = {}; data/jose-10/cmd/jose.c:488: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 cmd[len]; data/jose-10/cmd/jose.c:492:9: [2] (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 string. strcpy(cmd, "jose"); data/jose-10/cmd/jose.c:524:9: [2] (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 string. strcpy(full, "jose"); data/jose-10/cmd/jwe/pwd.h:27: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 pwd[4096]; data/jose-10/cmd/jwe/pwd.h:47: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 pwd[4096]; data/jose-10/cmd/jwe/pwd.h:51:11: [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). tty = fopen("/dev/tty", "r+"); data/jose-10/cmd/jwk/thp.c:148: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 enc[elen]; data/jose-10/lib/b64.c:33: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 eb[16 * JOSE_B64_ENC_BLK]; data/jose-10/lib/b64.c:89:9: [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(&i->eb[i->len], enc, el); data/jose-10/lib/b64.c:141:9: [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(&i->db[i->len], dec, dl); data/jose-10/lib/hsh.c:31: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 b[1024] = {}; data/jose-10/lib/io.c:90: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(&tmp[*i->len], in, len); data/jose-10/lib/io.c:159: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(&i->buf[*i->len], in, len); data/jose-10/lib/openssl/ecdhes.c:106:9: [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(&dk[c * hshl], hsh, c == reps ? left : hshl); data/jose-10/lib/openssl/pbes2.c:57: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 ky[KEYMAX]; data/jose-10/lib/openssl/pbes2.c:59: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(slt, alg, pfx); data/jose-10/lib/openssl/pbes2.c:60: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(&slt[pfx], st, stl); data/jose-10/cmd/b64/dec.c:79:18: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(opt.input); c != EOF; c = fgetc(opt.input)) { data/jose-10/cmd/b64/dec.c:79:50: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(opt.input); c != EOF; c = fgetc(opt.input)) { data/jose-10/cmd/b64/enc.c:78:18: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(opt.input); c != EOF; c = fgetc(opt.input)) { data/jose-10/cmd/b64/enc.c:78:50: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(opt.input); c != EOF; c = fgetc(opt.input)) { data/jose-10/cmd/jose.c:38:13: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(file); data/jose-10/cmd/jose.c:88: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). len = strlen(cfg->doc[i].arg); data/jose-10/cmd/jose.c:92: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). len = strlen(cfg->opt.name) + len; data/jose-10/cmd/jose.c:119:9: [1] (buffer) strncat: Easily used incorrectly (e.g., incorrectly computing the correct maximum size to add) [MS-banned] (CWE-120). Consider strcat_s, strlcat, snprintf, or automatically resizing strings. strncat(sopts, &(char) { cfgs[i].opt.val }, 1); data/jose-10/cmd/jose.c:122:33: [1] (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 character. case optional_argument: strcat(sopts, ":"); /* fallthrough */ data/jose-10/cmd/jose.c:123:33: [1] (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 character. case required_argument: strcat(sopts, ":"); /* fallthrough */ data/jose-10/cmd/jose.c:168:40: [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). n, d, maxl - (int) strlen(n), a, data/jose-10/cmd/jose.c:202: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). size_t len = strlen(&arg[i]); data/jose-10/cmd/jose.c:407:18: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(file); c != EOF && c != '.'; c = fgetc(file)) { data/jose-10/cmd/jose.c:407:57: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(file); c != EOF && c != '.'; c = fgetc(file)) { data/jose-10/cmd/jose.c:486:16: [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(argv[i]) + 1; data/jose-10/cmd/jose.c:506:13: [1] (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 character. strcat(cmd, " "); data/jose-10/cmd/jose.c:526:29: [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). snprintf(full + strlen(full), data/jose-10/cmd/jose.c:527: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). sizeof(full) - strlen(full) - 1, data/jose-10/cmd/jwe/dec.c:94:34: [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 strncmp(alg, "PBES2", strlen("PBES2")) == 0; data/jose-10/cmd/jwe/dec.c:182:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/dec.c:182:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/dec.c:193:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.io.input); data/jose-10/cmd/jwe/enc.c:47:13: [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(p) < 8) { data/jose-10/cmd/jwe/enc.c:287:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/enc.c:287:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/enc.c:298:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.io.input); data/jose-10/cmd/jwe/fmt.c:121:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/fmt.c:121:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jwe/fmt.c:132:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.input); data/jose-10/cmd/jwe/pwd.h:33:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). int c = fgetc(stdin); data/jose-10/cmd/jwe/pwd.h:69:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). int c = fgetc(tty); data/jose-10/cmd/jwk/thp.c:173:24: [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 (strlen(opt.find) == elen && data/jose-10/cmd/jws/fmt.c:95:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/fmt.c:95:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/fmt.c:106:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.input); data/jose-10/cmd/jws/sig.c:187:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/sig.c:187:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/sig.c:198:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.io.input); data/jose-10/cmd/jws/ver.c:133:22: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/ver.c:133:46: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int c = fgetc(f); c != EOF; c = fgetc(f)) { data/jose-10/cmd/jws/ver.c:144:17: [1] (buffer) fgetc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). c = fgetc(opt.io.input); data/jose-10/lib/b64.c:217:24: [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). const size_t len = strlen(map); data/jose-10/lib/b64.c:386:47: [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). out = jose_b64_enc((const uint8_t *) buf, strlen(buf)); data/jose-10/lib/b64.c:387:15: [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). zero(buf, strlen(buf)); data/jose-10/lib/jwk.c:356:31: [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). thp = hsh(cfg, hash, str, strlen(str)); data/jose-10/lib/jwk.c:357:15: [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). zero(str, strlen(str)); data/jose-10/lib/jwk.c:375:34: [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 = hsh_buf(cfg, alg, str, strlen(str), thp, len); data/jose-10/lib/jwk.c:376:15: [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). zero(str, strlen(str)); data/jose-10/lib/openssl/aescbch.c:296: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). i->al += strlen(prt); data/jose-10/lib/openssl/aescbch.c:297:44: [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 (HMAC_Update(i->hctx, (void *) prt, strlen(prt)) <= 0) data/jose-10/lib/openssl/aescbch.c:305:18: [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). i->al += strlen(aad); data/jose-10/lib/openssl/aescbch.c:306:48: [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 (HMAC_Update(i->hctx, (void *) aad, strlen(aad)) <= 0) data/jose-10/lib/openssl/ecdhes.c:225:26: [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). name, strlen(name), data/jose-10/lib/openssl/hmac.c:148:53: [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 (prot && HMAC_Update(hctx, (uint8_t *) prot, strlen(prot)) <= 0) data/jose-10/lib/openssl/pbes2.c:54:24: [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). const size_t pfx = strlen(alg) + 1; data/jose-10/lib/openssl/rsassa.c:163:45: [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 (prot && EVP_DigestUpdate(emc, prot, strlen(prot)) <= 0) data/jose-10/tests/alg_comp.c:79:52: [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). const size_t ilen = jose_b64_dec_buf(NULL, strlen(tests[i].inf), NULL, 0); data/jose-10/tests/alg_comp.c:80:52: [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). const size_t dlen = jose_b64_dec_buf(NULL, strlen(tests[i].def), NULL, 0); data/jose-10/tests/alg_comp.c:91:47: [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). assert(jose_b64_dec_buf(tests[i].inf, strlen(tests[i].inf), data/jose-10/tests/alg_comp.c:93:47: [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). assert(jose_b64_dec_buf(tests[i].def, strlen(tests[i].def), data/jose-10/tests/alg_encr.c:52:31: [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). assert(e->feed(e, pt, strlen(pt))); data/jose-10/tests/alg_encr.c:75:20: [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). assert(dlen == strlen(pt)); data/jose-10/tests/alg_hash.c:73:32: [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). for (size_t i = 0; i < strlen(msg); i++) data/jose-10/tests/alg_hash.c:76:36: [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). assert(hsh->feed(hsh, msg, strlen(msg))); data/jose-10/tests/alg_hash.c:95:16: [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). assert(strlen(v[i].hsh) == sizeof(a) * 2); data/jose-10/tests/alg_sign.c:41:36: [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). assert(sio->feed(sio, pay, strlen(pay))); data/jose-10/tests/alg_sign.c:53:36: [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). assert(vio->feed(vio, pay, strlen(pay))); data/jose-10/tests/api_b64.c:50:24: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). #pragma omp atomic read ANALYSIS SUMMARY: Hits = 105 Lines analyzed = 14489 in approximately 0.44 seconds (33129 lines/second) Physical Source Lines of Code (SLOC) = 9735 Hits@level = [0] 121 [1] 68 [2] 30 [3] 1 [4] 6 [5] 0 Hits@level+ = [0+] 226 [1+] 105 [2+] 37 [3+] 7 [4+] 6 [5+] 0 Hits/KSLOC@level+ = [0+] 23.2152 [1+] 10.7858 [2+] 3.80072 [3+] 0.719055 [4+] 0.616333 [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.