Changeset 47d4f8c


Ignore:
Timestamp:
06/27/18 18:01:48 (2 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
cachetimestamps, develop, master, rc-4.0.4, ringdecrementfix, ringperformance
Children:
1ed69dc
Parents:
35de364
Message:

Fix various string truncation/overflow warnings

Thanks gcc 8!

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • lib/format_linux_common.c

    rf9df20e r47d4f8c  
    8787                sock = socket(PF_INET, SOCK_STREAM, 0);
    8888                memset(&ifr, 0, sizeof(struct ifreq));
    89                 strncpy(ifr.ifr_name, libtrace->uridata, IF_NAMESIZE);
     89                strncpy(ifr.ifr_name, libtrace->uridata, IF_NAMESIZE - 1);
    9090                if (ioctl(sock, SIOCGIFHWADDR, &ifr) != 0) {
    9191                        perror("Can't get HWADDR for interface");
  • lib/libtrace.h.in

    r32ee9b2 r47d4f8c  
    277277typedef struct trace_err_t{
    278278        int err_num;            /**< error code */
    279         char problem[255];      /**< the format, uri etc that caused the error for reporting purposes */
     279        char problem[1024];     /**< the format, uri etc that caused the error for reporting purposes */
    280280} libtrace_err_t;
    281281
  • lib/trace.c

    r32ee9b2 r47d4f8c  
    107107 * will use our own one that does
    108108 */
    109 static void xstrncpy(char *dest, const char *src, size_t n)
    110 {
    111         strncpy(dest,src,n);
    112         dest[n]='\0';
     109static inline void xstrncpy(char *dest, const char *src, size_t n,
     110                size_t destlen)
     111{
     112        size_t slen = destlen - 1;
     113        if (n < slen) {
     114                slen = n;
     115        }
     116        strncpy(dest,src,slen);
     117        dest[slen]='\0';
    113118}
    114119
     
    120125                exit(EXIT_FAILURE);
    121126        }
    122         xstrncpy(ret,src,n);
     127        xstrncpy(ret,src,n,n+1);
    123128        return ret;
    124129}
     
    371376
    372377        if((uridata = strchr(uri,':')) == NULL) {
    373                 xstrncpy(scan, uri, strlen(uri));
     378                xstrncpy(scan, uri, strlen(uri), URI_PROTO_LINE);
    374379        } else {
    375                 xstrncpy(scan,uri, (size_t)(uridata - uri));
     380                xstrncpy(scan,uri, (size_t)(uridata - uri), URI_PROTO_LINE);
    376381        }
    377382
  • libpacketdump/eth_2054.c

    ree6e802 r47d4f8c  
    4747static char *format_hrd(const struct arphdr *arp, const char *hrd) {
    4848        static char buffer[1024] = {0,};
    49         int i;
     49        int i, ret;
     50        size_t bufused;
    5051
    5152        if (!hrd) {
     
    5960                        break;
    6061                default:
     62                        bufused = 0;
    6163                        for (i=0;i<arp->ar_hln;i++) {
    62                                 snprintf(buffer,sizeof(buffer),"%s %02x",
    63                                                 buffer,(unsigned char)hrd[i]);
     64                                if (bufused >= sizeof(buffer)) {
     65                                        break;
     66                                }
     67                                ret = snprintf(buffer + bufused,
     68                                                sizeof(buffer) - bufused,
     69                                                "%02x ",
     70                                                (unsigned char)hrd[i]);
     71                                if (ret > 0) {
     72                                        bufused += ret;
     73                                }
    6474                        }
    6575                        break;
     
    7787static char *format_pro(const struct arphdr *arp, const char *pro) {
    7888        static char buffer[1024] = {0,};
    79         int i;
     89        int i, ret;
     90        size_t bufused;
    8091       
    8192        if (!pro) {
     
    91102                default:
    92103                        snprintf(buffer, sizeof(buffer), "%s", " (");
     104                        bufused = 2;
    93105                        for (i=0;i<arp->ar_pln;i++) {
    94                                 snprintf(buffer,sizeof(buffer),"%s %02x",
    95                                                 buffer,(unsigned char)pro[i]);
     106                                if (bufused >= sizeof(buffer)) {
     107                                        break;
     108                                }
     109                                ret = snprintf(buffer + bufused,
     110                                                sizeof(buffer) - bufused,
     111                                                "%02x ",
     112                                                (unsigned char)pro[i]);
     113                                if (ret > 0) {
     114                                        bufused += ret;
     115                                }
    96116                        }
    97                         strncat(buffer,")",sizeof(buffer) - strlen(buffer) - 1);
     117                        if (bufused < sizeof(buffer)) {
     118                                snprintf(buffer + bufused,
     119                                                sizeof(buffer) - bufused,
     120                                                ")");
     121                        }
    98122                        break;
    99123        }
  • tools/tracereport/misc_report.c

    r8e11beb r47d4f8c  
    6767{
    6868        static char ret[1024];
    69         char tmp[1024];
     69        char tmp[128];
    7070        ret[0]='\0';
    7171        if (ts == 0)
  • tools/tracesplit/tracesplit.c

    r92cf299 r47d4f8c  
    6161static char *strdupcat(char *str,char *app)
    6262{
    63         str=realloc(str,strlen(str)+strlen(app)+1);
    64         strncat(str,app,strlen(str) + strlen(app));
     63        int newsize = strlen(str)+strlen(app)+1;
     64        str=realloc(str,newsize);
     65        strncat(str,app,newsize - strlen(str) - 1);
    6566        return str;
    6667}
Note: See TracChangeset for help on using the changeset viewer.