Changeset 47d4f8c for libpacketdump


Ignore:
Timestamp:
06/27/18 18:01:48 (3 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!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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        }
Note: See TracChangeset for help on using the changeset viewer.