Changeset aceeda6 for lib


Ignore:
Timestamp:
01/07/19 10:36:22 (21 months ago)
Author:
Jacob Van Walraven <jcv9@…>
Branches:
develop
Children:
3dc6ed6
Parents:
89ed4a0
git-author:
Jacob Van Walraven <jcv9@…> (12/17/18 11:55:21)
git-committer:
Jacob Van Walraven <jcv9@…> (01/07/19 10:36:22)
Message:

Add some checks to prevent segfaults with dead traces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_pcapng.c

    rb39eaee raceeda6  
    226226
    227227static inline uint32_t pcapng_get_record_type(const libtrace_packet_t *packet) {
    228 
    229228        uint32_t *btype = (uint32_t *)packet->header;
     229
     230        if (DATA(packet->trace) == NULL) {
     231                return *btype;
     232        }
    230233
    231234        if (DATA(packet->trace)->byteswapped)
     
    234237}
    235238
    236 static inline uint32_t pcapng_swap32(libtrace_packet_t *packet, uint32_t value) {
    237         if (DATAOUT(packet->trace)->byteswapped) {
     239static inline uint32_t pcapng_swap32(libtrace_out_t *libtrace, uint32_t value) {
     240        if (DATAOUT(libtrace) == NULL) {
     241                return value;
     242        }
     243
     244        if (DATAOUT(libtrace)->byteswapped) {
    238245                return byteswap32(value);
    239246        } else {
     
    241248        }
    242249}
    243 static inline uint32_t pcapng_swap16(libtrace_packet_t *packet, uint32_t value) {
    244         if (DATAOUT(packet->trace)->byteswapped) {
     250static inline uint32_t pcapng_swap16(libtrace_out_t *libtrace, uint32_t value) {
     251        if (DATAOUT(libtrace) == NULL) {
     252                return value;
     253        }
     254
     255        if (DATAOUT(libtrace)->byteswapped) {
    245256                return byteswap16(value);
    246257        } else {
     
    250261static inline uint32_t pcapng_get_blocklen(const libtrace_packet_t *packet) {
    251262        struct pcapng_peeker *hdr = (struct pcapng_peeker *)packet->buffer;
     263
     264        if (DATA(packet->trace) == NULL) {
     265                return hdr->blocklen;
     266        }
    252267
    253268        if (DATA(packet->trace)->byteswapped) {
     
    671686                                /* Create section block */
    672687                                pcapng_sec_t sechdr;
    673                                 sechdr.blocktype = pcapng_swap32(packet, PCAPNG_SECTION_TYPE);
    674                                 sechdr.blocklen = pcapng_swap32(packet, 28);
    675                                 sechdr.ordering = pcapng_swap32(packet, 0x1A2B3C4D);
    676                                 sechdr.majorversion = pcapng_swap16(packet, 1);
     688                                sechdr.blocktype = pcapng_swap32(libtrace, PCAPNG_SECTION_TYPE);
     689                                sechdr.blocklen = pcapng_swap32(libtrace, 28);
     690                                sechdr.ordering = pcapng_swap32(libtrace, 0x1A2B3C4D);
     691                                sechdr.majorversion = pcapng_swap16(libtrace, 1);
    677692                                sechdr.minorversion = 0;
    678693                                sechdr.sectionlen = 0xFFFFFFFFFFFFFFFF;
     
    689704                                /* Create interface block*/
    690705                                pcapng_int_t inthdr;
    691                                 inthdr.blocktype = pcapng_swap32(packet, PCAPNG_INTERFACE_TYPE);
    692                                 inthdr.blocklen = pcapng_swap32(packet, 20);
    693                                 inthdr.linktype = pcapng_swap16(packet, libtrace_to_pcap_dlt(linktype));
     706                                inthdr.blocktype = pcapng_swap32(libtrace, PCAPNG_INTERFACE_TYPE);
     707                                inthdr.blocklen = pcapng_swap32(libtrace, 20);
     708                                inthdr.linktype = pcapng_swap16(libtrace, libtrace_to_pcap_dlt(linktype));
    694709                                inthdr.reserved = 0;
    695710                                inthdr.snaplen = 0;
     
    749764
    750765        /* construct the packet */
    751         epkthdr.blocktype = pcapng_swap32(packet, PCAPNG_ENHANCED_PACKET_TYPE);
    752         epkthdr.blocklen = pcapng_swap32(packet, blocklen);
    753         epkthdr.interfaceid = pcapng_swap32(packet, DATAOUT(libtrace)->nextintid-1);
    754         epkthdr.timestamp_high = pcapng_swap32(packet, ts.timehigh);
    755         epkthdr.timestamp_low = pcapng_swap32(packet, ts.timelow);
    756         epkthdr.wlen = pcapng_swap32(packet, wirelen);
    757         epkthdr.caplen = pcapng_swap32(packet, caplen);
     766        epkthdr.blocktype = pcapng_swap32(libtrace, PCAPNG_ENHANCED_PACKET_TYPE);
     767        epkthdr.blocklen = pcapng_swap32(libtrace, blocklen);
     768        epkthdr.interfaceid = pcapng_swap32(libtrace, DATAOUT(libtrace)->nextintid-1);
     769        epkthdr.timestamp_high = pcapng_swap32(libtrace, ts.timehigh);
     770        epkthdr.timestamp_low = pcapng_swap32(libtrace, ts.timelow);
     771        epkthdr.wlen = pcapng_swap32(libtrace, wirelen);
     772        epkthdr.caplen = pcapng_swap32(libtrace, caplen);
    758773
    759774        /* output enhanced packet header */
Note: See TracChangeset for help on using the changeset viewer.