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/pdfcrack-0.19/md5.c Examining data/pdfcrack-0.19/pdfparser.h Examining data/pdfcrack-0.19/sha256.h Examining data/pdfcrack-0.19/passwords.c Examining data/pdfcrack-0.19/md5.h Examining data/pdfcrack-0.19/benchmark.h Examining data/pdfcrack-0.19/rc4.h Examining data/pdfcrack-0.19/pdfcrack.c Examining data/pdfcrack-0.19/benchmark.c Examining data/pdfcrack-0.19/sha256.c Examining data/pdfcrack-0.19/pdfparser.c Examining data/pdfcrack-0.19/pdfreader.c Examining data/pdfcrack-0.19/main.c Examining data/pdfcrack-0.19/common.h Examining data/pdfcrack-0.19/common.c Examining data/pdfcrack-0.19/passwords.h Examining data/pdfcrack-0.19/rc4.c Examining data/pdfcrack-0.19/pdfcrack.h FINAL RESULTS: data/pdfcrack-0.19/passwords.c:194:6: [4] (buffer) fscanf: 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. If the scanf format is influenceable by an attacker, it's exploitable. if(fscanf(file, string_PM, &pm) < 1) data/pdfcrack-0.19/passwords.c:197:8: [4] (buffer) fscanf: 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. If the scanf format is influenceable by an attacker, it's exploitable. if(fscanf(file, string_MPCLC, &maxPasswordLen, &charsetLen) < 2) data/pdfcrack-0.19/passwords.c:259:3: [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(file, string_PM, pwMethod); data/pdfcrack-0.19/passwords.c:261: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(file, string_MPCLC, maxPasswordLen, charsetLen); data/pdfcrack-0.19/pdfcrack.c:712:6: [4] (buffer) fscanf: 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. If the scanf format is influenceable by an attacker, it's exploitable. if(fscanf(file,string_PRVPL, &e->version_major, &e->version_minor, data/pdfcrack-0.19/pdfcrack.c:736:6: [4] (buffer) fscanf: 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. If the scanf format is influenceable by an attacker, it's exploitable. if(fscanf(file,string_FILTER, &len) < 1) data/pdfcrack-0.19/pdfcrack.c:780:6: [4] (buffer) fscanf: 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. If the scanf format is influenceable by an attacker, it's exploitable. if(fscanf(file, string_UUPWP, &tmp, &tmp2, &tmp3) < 3) data/pdfcrack-0.19/pdfcrack.c:812:3: [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(file, string_PRVPL, data/pdfcrack-0.19/pdfcrack.c:818:3: [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(file, string_FILTER, strlen(encdata->s_handler)); data/pdfcrack-0.19/pdfcrack.c:831:3: [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(file, string_UUPWP, (int)workWithUser, data/pdfcrack-0.19/main.c:117:9: [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. c = getopt_long(argc, argv, "bc:f:l:m:n:op:qsuw:v", data/pdfcrack-0.19/main.c:52: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). if((file = fopen(CRASHFILE, "w")) == 0) { data/pdfcrack-0.19/main.c:150:15: [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). maxpw = atoi(optarg); data/pdfcrack-0.19/main.c:154:15: [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). minpw = atoi(optarg); data/pdfcrack-0.19/main.c:228: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). if((file = fopen(inputfile, "rb")) == 0) { data/pdfcrack-0.19/main.c:282:20: [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). if((wordlist = fopen(wordlistfile, "r")) == 0) { data/pdfcrack-0.19/pdfcrack.c:75: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 str[33]; data/pdfcrack-0.19/pdfcrack.c:81: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(str,currPW,currPWLen); data/pdfcrack-0.19/pdfcrack.c:118: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(encKeyWorkSpace, pad, 32); data/pdfcrack-0.19/pdfcrack.c:121: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(encKeyWorkSpace + 32, ownerkey, 32); data/pdfcrack-0.19/pdfcrack.c:130: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(encKeyWorkSpace + 68, fileID, fileIDLen); data/pdfcrack-0.19/pdfcrack.c:199: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 str[33]; data/pdfcrack-0.19/pdfcrack.c:203: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(str,currPW,currPWLen); data/pdfcrack-0.19/pdfcrack.c:221: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(str, password_user, pad_start); data/pdfcrack-0.19/pdfcrack.c:263: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(test, encdata->u_string, PARTIAL_TEST_SIZE); data/pdfcrack-0.19/pdfcrack.c:270: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(test, encdata->u_string, length); data/pdfcrack-0.19/pdfcrack.c:283: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(currPW + currPWLen, pad, 32-currPWLen); \ data/pdfcrack-0.19/pdfcrack.c:304: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(password_user, encKeyWorkSpace, 32); data/pdfcrack-0.19/pdfcrack.c:331:7: [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(test, encdata->o_string, 32); data/pdfcrack-0.19/pdfcrack.c:333:7: [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(encKeyWorkSpace, test, 32); data/pdfcrack-0.19/pdfcrack.c:336: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(password_user, encKeyWorkSpace, 32); data/pdfcrack-0.19/pdfcrack.c:386:7: [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(test, encdata->o_string, PARTIAL_TEST_SIZE); data/pdfcrack-0.19/pdfcrack.c:391: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(test, encdata->o_string, 32); data/pdfcrack-0.19/pdfcrack.c:419:7: [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(test, encdata->u_string, PARTIAL_TEST_SIZE); data/pdfcrack-0.19/pdfcrack.c:426: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(test, encdata->u_string, length); data/pdfcrack-0.19/pdfcrack.c:474: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(currPW + currPWLen, encdata->u_string+32, 8); data/pdfcrack-0.19/pdfcrack.c:502: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(currPW + currPWLen, encdata->o_string+32, 8); data/pdfcrack-0.19/pdfcrack.c:503: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(currPW + currPWLen+8, encdata->u_string, 48); data/pdfcrack-0.19/pdfcrack.c:531:7: [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(currPW, encdata->u_string+32, 8); data/pdfcrack-0.19/pdfcrack.c:535:7: [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(currPW, encdata->o_string+32, 8); data/pdfcrack-0.19/pdfcrack.c:536:7: [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(currPW + 8, encdata->u_string, 48); data/pdfcrack-0.19/pdfcrack.c:541: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(cpw, pad, 32); data/pdfcrack-0.19/pdfcrack.c:643: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(password_user, upw, upwlen); data/pdfcrack-0.19/pdfcrack.c:644: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(password_user+upwlen, pad, 32-upwlen); data/pdfcrack-0.19/pdfcrack.c:645: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(encKeyWorkSpace, password_user, 32); data/pdfcrack-0.19/pdfcrack.c:650: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(encKeyWorkSpace, password_user, 32); data/pdfcrack-0.19/pdfcrack.c:656:7: [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(encKeyWorkSpace, pad, 32); data/pdfcrack-0.19/pdfcrack.c:659:7: [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(password_user, pad, 32); data/pdfcrack-0.19/pdfcrack.c:665: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(buf, pad, 32); data/pdfcrack-0.19/pdfcrack.c:666: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(buf + 32, e->fileID, e->fileIDLen); data/pdfcrack-0.19/pdfcrack.c:674:7: [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(encKeyWorkSpace, pad, 32); data/pdfcrack-0.19/pdfcrack.c:677:7: [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(password_user, pad, 32); data/pdfcrack-0.19/pdfparser.c:127: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 buff[BUFFSIZE]; data/pdfcrack-0.19/pdfparser.c:144: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(ret, buff, i); data/pdfcrack-0.19/pdfparser.c:300: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(ret->content, tmp, l); data/pdfcrack-0.19/pdfreader.c:39: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). if((file = fopen(argv[1], "r")) == 0) { data/pdfcrack-0.19/rc4.c:68: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(state, initial_state, 256); data/pdfcrack-0.19/rc4.c:117: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(state, initial_state, 256); data/pdfcrack-0.19/rc4.c:155: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(state, initial_state, 256); data/pdfcrack-0.19/rc4.c:201: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(state, initial_state, 256); data/pdfcrack-0.19/sha256.c:162: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(blk, msg + i, blkLen); data/pdfcrack-0.19/sha256.c:211: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(blk, msg, blkLen); data/pdfcrack-0.19/passwords.c:51:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(wordList); data/pdfcrack-0.19/passwords.c:54:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(wordList); data/pdfcrack-0.19/passwords.c:60:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(wordList); data/pdfcrack-0.19/passwords.c:63:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(wordList); data/pdfcrack-0.19/passwords.c:138: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). charsetLen = strlen((const char*)charset); data/pdfcrack-0.19/passwords.c:206:19: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). string[i] = getc(file); data/pdfcrack-0.19/passwords.c:211:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) != '\n') data/pdfcrack-0.19/passwords.c:232:19: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). string[i] = getc(file); data/pdfcrack-0.19/passwords.c:236:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) != '\n') { data/pdfcrack-0.19/passwords.c:267: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). fprintf(file, "Wordlist(%zu): %s", strlen(wordListName), wordListName); data/pdfcrack-0.19/pdfcrack.c:640: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). upwlen = strlen((const char*)upw); data/pdfcrack-0.19/pdfcrack.c:746:23: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). e->s_handler[i] = getc(file); data/pdfcrack-0.19/pdfcrack.c:818: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). fprintf(file, string_FILTER, strlen(encdata->s_handler)); data/pdfcrack-0.19/pdfparser.c:74:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:77:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:81:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:92:30: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). return parseIntWithC(file, getc(file)); data/pdfcrack-0.19/pdfparser.c:100:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:110:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:114:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:116:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:135:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:139:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:173: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). for(i=0; i<strlen(str); ++i) data/pdfcrack-0.19/pdfparser.c:174:14: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if((ch = getc(file)) != str[i]) data/pdfcrack-0.19/pdfparser.c:186:6: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) == '%' && getc(file) == 'P' && getc(file) == 'D' data/pdfcrack-0.19/pdfparser.c:186:27: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) == '%' && getc(file) == 'P' && getc(file) == 'D' data/pdfcrack-0.19/pdfparser.c:186:48: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) == '%' && getc(file) == 'P' && getc(file) == 'D' data/pdfcrack-0.19/pdfparser.c:187:9: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). && getc(file) == 'F' && getc(file) == '-') { data/pdfcrack-0.19/pdfparser.c:187:30: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). && getc(file) == 'F' && getc(file) == '-') { data/pdfcrack-0.19/pdfparser.c:189:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(getc(file) == '.') data/pdfcrack-0.19/pdfparser.c:316:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:329:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:343:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:362:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:366:23: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == '<' && getc(file) == '<') { data/pdfcrack-0.19/pdfparser.c:373:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:376:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:382:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:390:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:392:9: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:395:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:408:25: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). else if(ch == 'I' && getc(file) == 'D') { data/pdfcrack-0.19/pdfparser.c:411:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:428:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:431:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:442:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:446:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:479:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:485:18: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == '<' && getc(file) == '<') { data/pdfcrack-0.19/pdfparser.c:493:9: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:496:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:501:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:503:11: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:506:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:519:34: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). else if(!id && ch == 'I' && getc(file) == 'D') { data/pdfcrack-0.19/pdfparser.c:522:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:537:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:540:13: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:552:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:556:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:594:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:597:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:605:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:611:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:613:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:629:12: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:668:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:689:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:697:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:706:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:727:7: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:809:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:816:20: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == 'o' && getc(file) == 'b' && getc(file) == 'j' && data/pdfcrack-0.19/pdfparser.c:816:41: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == 'o' && getc(file) == 'b' && getc(file) == 'j' && data/pdfcrack-0.19/pdfparser.c:817:48: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). parseWhiteSpaceOrComment(file) == '<' && getc(file) == '<') { data/pdfcrack-0.19/pdfparser.c:823:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:829:8: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); data/pdfcrack-0.19/pdfparser.c:837:20: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == 'o' && getc(file) == 'b' && getc(file) == 'j' && data/pdfcrack-0.19/pdfparser.c:837:41: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). if(ch == 'o' && getc(file) == 'b' && getc(file) == 'j' && data/pdfcrack-0.19/pdfparser.c:838:48: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). parseWhiteSpaceOrComment(file) == '<' && getc(file) == '<') { data/pdfcrack-0.19/pdfparser.c:844:10: [1] (buffer) getc: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). ch = getc(file); ANALYSIS SUMMARY: Hits = 144 Lines analyzed = 3986 in approximately 0.13 seconds (31344 lines/second) Physical Source Lines of Code (SLOC) = 2838 Hits@level = [0] 85 [1] 82 [2] 51 [3] 1 [4] 10 [5] 0 Hits@level+ = [0+] 229 [1+] 144 [2+] 62 [3+] 11 [4+] 10 [5+] 0 Hits/KSLOC@level+ = [0+] 80.6906 [1+] 50.74 [2+] 21.8464 [3+] 3.87597 [4+] 3.52361 [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.