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/grpn-1.4.1/help.h Examining data/grpn-1.4.1/run_cmd.c Examining data/grpn-1.4.1/options.h Examining data/grpn-1.4.1/license.h Examining data/grpn-1.4.1/stack.h Examining data/grpn-1.4.1/setup_menu.c Examining data/grpn-1.4.1/help.c Examining data/grpn-1.4.1/process_input.c Examining data/grpn-1.4.1/matrix.c Examining data/grpn-1.4.1/real.c Examining data/grpn-1.4.1/menu.h Examining data/grpn-1.4.1/funcs.c Examining data/grpn-1.4.1/main.c Examining data/grpn-1.4.1/lcd.h Examining data/grpn-1.4.1/real.h Examining data/grpn-1.4.1/buttons.h Examining data/grpn-1.4.1/version.h Examining data/grpn-1.4.1/undo.c Examining data/grpn-1.4.1/options.c Examining data/grpn-1.4.1/typedefs.h Examining data/grpn-1.4.1/complex.c Examining data/grpn-1.4.1/test_gtk_ver.c Examining data/grpn-1.4.1/error.c Examining data/grpn-1.4.1/run_cmd.h Examining data/grpn-1.4.1/number.c Examining data/grpn-1.4.1/constant.h Examining data/grpn-1.4.1/undo.h Examining data/grpn-1.4.1/error.h Examining data/grpn-1.4.1/mode.h Examining data/grpn-1.4.1/mode.c Examining data/grpn-1.4.1/number.h Examining data/grpn-1.4.1/stack.c Examining data/grpn-1.4.1/complex.h Examining data/grpn-1.4.1/matrix.h Examining data/grpn-1.4.1/process_input.h Examining data/grpn-1.4.1/constant.c Examining data/grpn-1.4.1/editor.h Examining data/grpn-1.4.1/callback_buttons.c Examining data/grpn-1.4.1/callback_menu.c Examining data/grpn-1.4.1/editor.c Examining data/grpn-1.4.1/setup_buttons.c Examining data/grpn-1.4.1/test.h Examining data/grpn-1.4.1/test.c Examining data/grpn-1.4.1/button_def.c Examining data/grpn-1.4.1/lcd.c Examining data/grpn-1.4.1/funcs.h Examining data/grpn-1.4.1/circle.c FINAL RESULTS: data/grpn-1.4.1/complex.c:135:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(c, "(%s< %s)", p1, p2); data/grpn-1.4.1/complex.c:139:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(c, "(%s; %s)", p1, p2); data/grpn-1.4.1/complex.c:168:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(c, "(%s< %s)", p1, p2); data/grpn-1.4.1/complex.c:172:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(c, "(%s; %s)", p1, p2); data/grpn-1.4.1/error.c:51:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(ErrorString, "%s Error: Too few Arguments.", name); data/grpn-1.4.1/error.c:58:4: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(ErrorString, "%s Error: Invalid Type.", name); data/grpn-1.4.1/help.c:209:7: [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(htxt, LICENSE_TXT); data/grpn-1.4.1/help.c:237:7: [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(htxt, HELP_TXT); data/grpn-1.4.1/help.c:243:9: [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(htxt, cmd); data/grpn-1.4.1/help.c:246:9: [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(htxt, rowinf[i].fi[j].help); data/grpn-1.4.1/help.c:268:7: [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(htxt, GRPN_VERSION); data/grpn-1.4.1/help.c:269:7: [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(htxt, ABOUT_TXT); data/grpn-1.4.1/matrix.c:153: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(c, (p1=printNumberShort(*(a->data+(a->cols*i)+j)))); data/grpn-1.4.1/run_cmd.c:85:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(getStringError(), "%s: Ambigious command name.", line); data/grpn-1.4.1/run_cmd.c:88:7: [4] (buffer) sprintf: Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or vsnprintf. sprintf(getStringError(), "%s: Unrecognized command.", line); data/grpn-1.4.1/editor.c:30:1: [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 Ebuf[EDIT_BUF_LEN]; /* the edit buffer */ data/grpn-1.4.1/error.c:28:1: [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 ErrorString[MAX_ERROR_SIZE] = { 0 }; data/grpn-1.4.1/error.h:25: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. extern char ErrorString[MAX_ERROR_SIZE]; data/grpn-1.4.1/funcs.c:871: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 *p, buf[2]; data/grpn-1.4.1/lcd.c:288: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 label[16]; /* the stack number label */ data/grpn-1.4.1/lcd.c:348: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(label, "%d: ", indx+1); data/grpn-1.4.1/lcd.c:376: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(label, "%d: ", i+1); data/grpn-1.4.1/matrix.c:136: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(c, "[%d x %d Matrix]", a->rows, a->cols); data/grpn-1.4.1/matrix.c:150:7: [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(c, "[ "); data/grpn-1.4.1/matrix.c:157:28: [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. if(i < a->rows-1) strcat(c, " \n"); data/grpn-1.4.1/matrix.c:207: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(getStringError(), "* Error: Invalid dimension."); data/grpn-1.4.1/matrix.c:433: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(getStringError(), "+ Error: Invalid dimension."); data/grpn-1.4.1/matrix.c:521: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(getStringError(), "- Error: Invalid dimension."); data/grpn-1.4.1/mode.c:63: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. static char buf[256]; data/grpn-1.4.1/mode.c:68:10: [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(buf, " Degrees "); data/grpn-1.4.1/mode.c:71:10: [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(buf, " Radians "); data/grpn-1.4.1/mode.c:81:10: [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(buf, "Rectangular "); data/grpn-1.4.1/mode.c:84:10: [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(buf, "Polar "); data/grpn-1.4.1/mode.c:94:10: [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(buf, "Binary"); data/grpn-1.4.1/mode.c:97:10: [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(buf, "Octal"); data/grpn-1.4.1/mode.c:100:10: [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(buf, "Decimal"); data/grpn-1.4.1/mode.c:103:10: [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(buf, "Decimal-Eng"); data/grpn-1.4.1/mode.c:106:10: [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(buf, "Hexadecimal"); data/grpn-1.4.1/real.c:142: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 buf[REAL_PRINT_SIZE]; data/grpn-1.4.1/real.c:188:19: [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(c, "00"); data/grpn-1.4.1/real.c:194:16: [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(c, "%.*g",PRINT_REAL_DIG, a->num); data/grpn-1.4.1/real.c:202:20: [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(c, "%.*e",DBL_DIG, a->num); data/grpn-1.4.1/real.c:235:22: [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(c,"%.*ge%+d",PRINT_REAL_DIG,mantissa,exponent); data/grpn-1.4.1/real.c:237:22: [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(c,"%.*g",PRINT_REAL_DIG,a->num); data/grpn-1.4.1/real.c:269:19: [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(c, "0x0"); data/grpn-1.4.1/real.c:271: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(c, "0x"); data/grpn-1.4.1/real.c:278: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(c, "NaN"); data/grpn-1.4.1/real.c:281: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(c, "Infinity"); data/grpn-1.4.1/complex.c:176:7: [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(p1)+strlen(p2)+4 > lcdWidth-4) *(c+strlen(p1)+2) = '\n'; data/grpn-1.4.1/complex.c:176: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). if(strlen(p1)+strlen(p2)+4 > lcdWidth-4) *(c+strlen(p1)+2) = '\n'; data/grpn-1.4.1/complex.c:176:49: [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(p1)+strlen(p2)+4 > lcdWidth-4) *(c+strlen(p1)+2) = '\n'; data/grpn-1.4.1/error.c:44:4: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(ErrorString, error, MAX_ERROR_SIZE); data/grpn-1.4.1/funcs.c:65:10: [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(line) > pos) runCmd(line+pos); data/grpn-1.4.1/help.c:212:9: [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(htxt, "\n"); data/grpn-1.4.1/help.c:244: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). len = 12 - strlen(cmd); data/grpn-1.4.1/help.c:245:30: [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. for(k=0; k<len; k++) strcat(htxt, " "); data/grpn-1.4.1/help.c:247:9: [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(htxt, "\n"); data/grpn-1.4.1/help.c:272:9: [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(htxt, "\n"); data/grpn-1.4.1/lcd.c:318: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). strLen = strlen(c); data/grpn-1.4.1/lcd.c:320:7: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(lcdText[0], c, strLen); data/grpn-1.4.1/lcd.c:349: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). labelLen = strlen(label); data/grpn-1.4.1/lcd.c:351:7: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(lcdText[row], label, labelLen); data/grpn-1.4.1/lcd.c:356:10: [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). pLen = strlen(p); data/grpn-1.4.1/lcd.c:361:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(&(lcdText[i][txtPos]), p, lcdWidth-txtPos); data/grpn-1.4.1/lcd.c:377: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). labelLen = strlen(label); data/grpn-1.4.1/lcd.c:379:7: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(lcdText[j-1], label, labelLen); data/grpn-1.4.1/lcd.c:390: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). strLen = strlen(txt); data/grpn-1.4.1/lcd.c:393:7: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(lcdText[lcdHeight-1], txt, strLen); data/grpn-1.4.1/lcd.c:769:10: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(str+(i*(width+1)), &(lcdText[i+hiY1][hiX1]), width); data/grpn-1.4.1/matrix.c:154: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(c, " "); data/grpn-1.4.1/matrix.c:159:7: [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(c, "]"); data/grpn-1.4.1/real.c:163:19: [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(c, "0"); data/grpn-1.4.1/real.c:165:5: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(c, p+2, i-1); data/grpn-1.4.1/real.c:190:5: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(c, p+1, i-0); data/grpn-1.4.1/real.c:272:5: [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(c, p+2, i-1); data/grpn-1.4.1/run_cmd.c:45: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). lineLen = strlen(line); data/grpn-1.4.1/run_cmd.c:52: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). cmdLen = strlen(rowinf[i].fi[j].cmd); ANALYSIS SUMMARY: Hits = 77 Lines analyzed = 9612 in approximately 0.32 seconds (30166 lines/second) Physical Source Lines of Code (SLOC) = 6500 Hits@level = [0] 164 [1] 29 [2] 33 [3] 0 [4] 15 [5] 0 Hits@level+ = [0+] 241 [1+] 77 [2+] 48 [3+] 15 [4+] 15 [5+] 0 Hits/KSLOC@level+ = [0+] 37.0769 [1+] 11.8462 [2+] 7.38462 [3+] 2.30769 [4+] 2.30769 [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.