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/4g8-1.0/src/error.c
Examining data/4g8-1.0/src/ethernet_hdr.c
Examining data/4g8-1.0/src/ethernet_hdr.h
Examining data/4g8-1.0/src/exit.c
Examining data/4g8-1.0/src/exit.h
Examining data/4g8-1.0/src/icmpv4_hdr.c
Examining data/4g8-1.0/src/icmpv4_hdr.h
Examining data/4g8-1.0/src/init.c
Examining data/4g8-1.0/src/init.h
Examining data/4g8-1.0/src/ipv4_hdr.c
Examining data/4g8-1.0/src/ipv4_hdr.h
Examining data/4g8-1.0/src/dump_packet.h
Examining data/4g8-1.0/src/process_packets.c
Examining data/4g8-1.0/src/process_packets.h
Examining data/4g8-1.0/src/stats.c
Examining data/4g8-1.0/src/stats.h
Examining data/4g8-1.0/src/arp_cache.h
Examining data/4g8-1.0/src/usage.c
Examining data/4g8-1.0/src/usage.h
Examining data/4g8-1.0/src/tcp_hdr.c
Examining data/4g8-1.0/src/tcp_hdr.h
Examining data/4g8-1.0/src/udp_hdr.c
Examining data/4g8-1.0/src/udp_hdr.h
Examining data/4g8-1.0/src/utils.c
Examining data/4g8-1.0/src/utils.h
Examining data/4g8-1.0/src/dump_packet.c
Examining data/4g8-1.0/src/arp_cache.c
Examining data/4g8-1.0/src/error.h
Examining data/4g8-1.0/src/globals.h
Examining data/4g8-1.0/src/main.c
Examining data/4g8-1.0/src/main.h

FINAL RESULTS:

data/4g8-1.0/src/error.c:35:5:  [4] (format) vsnprintf:
  If format strings can be influenced by an attacker, they can be exploited,
  and note that sprintf variations do not always \0-terminate (CWE-134). Use
  a constant for the format specification.
    vsnprintf(error_buf, ERRBUF_MAXLEN, err, va);
data/4g8-1.0/src/utils.c:88:5:  [4] (format) vsnprintf:
  If format strings can be influenced by an attacker, they can be exploited,
  and note that sprintf variations do not always \0-terminate (CWE-134). Use
  a constant for the format specification.
    vsnprintf(msg, 256, msgp, va);
data/4g8-1.0/src/utils.c:468:12:  [4] (buffer) sprintf:
  Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or
  vsnprintf.
           sprintf(eaddr, "%s:%0x", eaddr, oct);
data/4g8-1.0/src/main.c:55:18:  [3] (buffer) getopt:
  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.
    while((opt = getopt(argc, argv, "G:g:hi:S:s:vw:X")) != -1)
data/4g8-1.0/src/utils.c:36:5:  [3] (random) srand:
  This function is not sufficiently random for security-related functions
  such as key and nonce creation (CWE-327). Use a more secure technique for
  acquiring random values.
    srand(time(0) ^ getpid() * r_int);
data/4g8-1.0/src/dump_packet.c:39: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 hex_data[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp;
data/4g8-1.0/src/dump_packet.c:40: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 ascii_data[HEXDUMP_BYTES_PER_LINE+1], *asp;
data/4g8-1.0/src/error.h:32: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 error_buf[ERRBUF_MAXLEN];
data/4g8-1.0/src/globals.h:130: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 w_file[OPT_MAXLEN];
data/4g8-1.0/src/main.c:25: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 w_file[OPT_MAXLEN];
data/4g8-1.0/src/main.c:42: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 error_buf[ERRBUF_MAXLEN];
data/4g8-1.0/src/tcp_hdr.c:65: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(flags, "None");
data/4g8-1.0/src/utils.c:122:17:  [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(icmp_c, "Network");
data/4g8-1.0/src/utils.c:126:17:  [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(icmp_c, "Host");
data/4g8-1.0/src/utils.c:130:17:  [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(icmp_c, "Protocol");
data/4g8-1.0/src/utils.c:134:17:  [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(icmp_c, "Port");
data/4g8-1.0/src/utils.c:138:17:  [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(icmp_c, "Need Fragment");
data/4g8-1.0/src/utils.c:142:17:  [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(icmp_c, "Source Fail");
data/4g8-1.0/src/utils.c:146:17:  [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(icmp_c, "Network Unknown");
data/4g8-1.0/src/utils.c:150:17:  [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(icmp_c, "Host Unknown");
data/4g8-1.0/src/utils.c:154:17:  [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(icmp_c, "Isolated");
data/4g8-1.0/src/utils.c:158:17:  [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(icmp_c, "Network Prohibited");
data/4g8-1.0/src/utils.c:162:17:  [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(icmp_c, "Host Prohibited");
data/4g8-1.0/src/utils.c:166:17:  [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(icmp_c, "ToS Network");
data/4g8-1.0/src/utils.c:170:17:  [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(icmp_c, "ToS Host");
data/4g8-1.0/src/utils.c:174:17:  [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(icmp_c, "Filter Prohibited");
data/4g8-1.0/src/utils.c:178:17:  [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(icmp_c, "Host Precedence");
data/4g8-1.0/src/utils.c:182:17:  [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(icmp_c, "Precedence Cutoff");
data/4g8-1.0/src/utils.c:186:17:  [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(icmp_c, "Unknown");
data/4g8-1.0/src/utils.c:196:17:  [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(icmp_c, "Network");
data/4g8-1.0/src/utils.c:200:17:  [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(icmp_c, "Host");
data/4g8-1.0/src/utils.c:204:17:  [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(icmp_c, "ToS Net");
data/4g8-1.0/src/utils.c:208:17:  [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(icmp_c, "ToS Host");
data/4g8-1.0/src/utils.c:212:17:  [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(icmp_c, "Unknown");
data/4g8-1.0/src/utils.c:222:17:  [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(icmp_c, "In Transit");
data/4g8-1.0/src/utils.c:226:17:  [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(icmp_c, "Reassembly");
data/4g8-1.0/src/utils.c:230:17:  [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(icmp_c, "Unknown");
data/4g8-1.0/src/utils.c:240:17:  [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(icmp_c, "Missing Option");
data/4g8-1.0/src/utils.c:244:17:  [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(icmp_c, "Unknown");
data/4g8-1.0/src/utils.c:250:9:  [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(icmp_c, "Unknown");
data/4g8-1.0/src/utils.c:271:13:  [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(icmp_t, "Echo Reply");
data/4g8-1.0/src/utils.c:275:13:  [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(icmp_t, "Unreachable");
data/4g8-1.0/src/utils.c:279:13:  [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(icmp_t, "Source Quench");
data/4g8-1.0/src/utils.c:283:13:  [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(icmp_t, "Redirect");
data/4g8-1.0/src/utils.c:287:13:  [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(icmp_t, "Echo Request");
data/4g8-1.0/src/utils.c:291:13:  [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(icmp_t, "Time Exceeded");
data/4g8-1.0/src/utils.c:295:13:  [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(icmp_t, "Param Problem");
data/4g8-1.0/src/utils.c:299:13:  [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(icmp_t, "Timestamp");
data/4g8-1.0/src/utils.c:303:13:  [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(icmp_t, "Timestamp Reply");
data/4g8-1.0/src/utils.c:307:13:  [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(icmp_t, "Info Request");
data/4g8-1.0/src/utils.c:311:13:  [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(icmp_t, "Info Reply");
data/4g8-1.0/src/utils.c:315:13:  [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(icmp_t, "Router Advertise");
data/4g8-1.0/src/utils.c:319:13:  [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(icmp_t, "Router Selection");
data/4g8-1.0/src/utils.c:323:13:  [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(icmp_t, "Address Mask Request");
data/4g8-1.0/src/utils.c:327:13:  [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(icmp_t, "Address Mask Reply");
data/4g8-1.0/src/utils.c:331:13:  [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(icmp_t, "Traceroute");
data/4g8-1.0/src/utils.c:335:13:  [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(icmp_t, "Unknown");
data/4g8-1.0/src/utils.c:356:13:  [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(hw_t, "Net/ROM Pseudo");
data/4g8-1.0/src/utils.c:360:13:  [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(hw_t, "Ethernet 10/100");
data/4g8-1.0/src/utils.c:364:13:  [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(hw_t, "Experimental Ethernet");
data/4g8-1.0/src/utils.c:368:13:  [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(hw_t, "AX.25 Level 2");
data/4g8-1.0/src/utils.c:372:13:  [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(hw_t, "ProNet Token Ring");
data/4g8-1.0/src/utils.c:376:13:  [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(hw_t, "IEEE 802.2 Ethernet");
data/4g8-1.0/src/utils.c:380:13:  [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(hw_t, "ARCNet");
data/4g8-1.0/src/utils.c:384:13:  [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(hw_t, "AppleTalk");
data/4g8-1.0/src/utils.c:388:13:  [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(hw_t, "Lanstar");
data/4g8-1.0/src/utils.c:392:13:  [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(hw_t, "Frame Relay DLCI");
data/4g8-1.0/src/utils.c:396:13:  [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(hw_t, "ATM");
data/4g8-1.0/src/utils.c:400:13:  [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(hw_t, "Metricom STRIP");
data/4g8-1.0/src/utils.c:404:13:  [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(hw_t, "IPsec Tunnel");
data/4g8-1.0/src/utils.c:470:12:  [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(eaddr, "%0x", oct);
data/4g8-1.0/src/init.c:71: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).
    if(strlen(w_file) > 0)
data/4g8-1.0/src/main.c:100:17:  [1] (buffer) strncpy:
  Easily used incorrectly; doesn't always \0-terminate or check for invalid
  pointers [MS-banned] (CWE-120).
                strncpy(w_file, optarg, OPT_MAXLEN);
data/4g8-1.0/src/tcp_hdr.c:47: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(flags, "U");
data/4g8-1.0/src/tcp_hdr.c:50: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(flags, "A");
data/4g8-1.0/src/tcp_hdr.c:53: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(flags, "P");
data/4g8-1.0/src/tcp_hdr.c:56: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(flags, "R");
data/4g8-1.0/src/tcp_hdr.c:59: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(flags, "S");
data/4g8-1.0/src/tcp_hdr.c:62: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(flags, "F");
data/4g8-1.0/src/tcp_hdr.c:64: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).
    if(strlen(flags) == 0)
data/4g8-1.0/src/utils.c:90: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).
    msg_len = strlen(msg);
data/4g8-1.0/src/utils.c:428:9:  [1] (buffer) strncpy:
  Easily used incorrectly; doesn't always \0-terminate or check for invalid
  pointers [MS-banned] (CWE-120).
        strncpy(o_ethstr, ethstr, 18);

ANALYSIS SUMMARY:

Hits = 82
Lines analyzed = 2517 in approximately 0.08 seconds (30256 lines/second)
Physical Source Lines of Code (SLOC) = 1413
Hits@level = [0] 114 [1]  11 [2]  66 [3]   2 [4]   3 [5]   0
Hits@level+ = [0+] 196 [1+]  82 [2+]  71 [3+]   5 [4+]   3 [5+]   0
Hits/KSLOC@level+ = [0+] 138.712 [1+] 58.0326 [2+] 50.2477 [3+] 3.53857 [4+] 2.12314 [5+]   0
Minimum risk level = 1
Not every hit is necessarily a security vulnerability.
There may be other security vulnerabilities; review your code!
See 'Secure Programming HOWTO'
(https://dwheeler.com/secure-programs) for more information.