Changeset 502 for trunk/src


Ignore:
Timestamp:
Mar 5, 2016, 11:02:21 AM (9 years ago)
Author:
katerina
Message:

Tighter sanity checks in sh_static.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_static.c

    r501 r502  
    10521052        if (!data)
    10531053                return -1;
     1054        if ((offset < 0) || (offset > (PACKETSZ-1)))
     1055                return -1;
    10541056        while ((l=data[offset])) {
    1055                 if (offset < INT_MAX) offset++;
     1057                if (offset < (PACKETSZ-1)) offset++;
    10561058                else return -1;
    10571059                if (measure)
     
    10621064                        /* compressed item, redirect */
    10631065                        offset = ((l & 0x3f) << 8) | data[offset];
    1064                         if (offset < 0)
     1066                        if ((offset < 0) || (offset > (PACKETSZ-1)))
    10651067                          return -1;
    10661068                        measure = 0;
     
    10761078                memcpy(dest + used, data + offset, l);
    10771079               
    1078                 if (offset <= (INT_MAX - l))
     1080                if (offset <= ((PACKETSZ-1) - l))
    10791081                  offset += l;
    10801082                else
     
    10881090                  { if (total <= (INT_MAX -l)) total += l; else return -1; }
    10891091
    1090                 if (used == INT_MAX)
     1092                if (used >= maxlen)
    10911093                  return -1;
    10921094                if (data[offset] != 0)
     
    11131115
    11141116        i = __decode_dotted(message, offset, temp, sizeof(temp));
    1115         if (i < 0)
    1116                 return i;
    1117 
    1118         if (offset <= (INT_MAX - i))
     1117        if (i < 0 || i > PACKETSZ)
     1118                return -1;
     1119
     1120        if (offset <= ((PACKETSZ - 10) - i))
    11191121          message += offset + i;
    11201122        else
     
    13491351                }
    13501352
     1353                /* ok because we have checked that recv at least HFIXEDSZ */
    13511354                __decode_header(packet, &h);
    13521355
     
    13821385                                goto again;
    13831386                        pos += i;
     1387                        if (pos >= PACKETSZ)
     1388                                goto again;
    13841389                }
    13851390                DPRINTF("Decoding answer at pos %d\n", pos);
     
    14001405                    free(a->dotted);
    14011406                    pos += i;
     1407                    if (pos >= PACKETSZ)
     1408                            goto again;
    14021409                }
    14031410
Note: See TracChangeset for help on using the changeset viewer.