diff options
Diffstat (limited to 'editcap.c')
-rw-r--r-- | editcap.c | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1221,23 +1221,26 @@ main(int argc, char *argv[]) phdr = wtap_phdr(wth); - if (choplen < 0 && (phdr->caplen + choplen) > 0) { + if (snaplen != 0 && phdr->caplen > snaplen) { snap_phdr = *phdr; - snap_phdr.caplen += choplen; + snap_phdr.caplen = snaplen; phdr = &snap_phdr; } - if (choplen > 0 && phdr->caplen > (unsigned int) choplen) { + if (choplen < 0) { snap_phdr = *phdr; - snap_phdr.caplen -= choplen; - snap_phdr.len -= choplen; - buf += choplen; + if (((signed int) phdr->caplen + choplen) > 0) + snap_phdr.caplen += choplen; + else + snap_phdr.caplen = 0; phdr = &snap_phdr; - } - - if (snaplen != 0 && phdr->caplen > snaplen) { + } else if (choplen > 0) { snap_phdr = *phdr; - snap_phdr.caplen = snaplen; + if (phdr->caplen > (unsigned int) choplen) { + snap_phdr.caplen -= choplen; + buf += choplen; + } else + snap_phdr.caplen = 0; phdr = &snap_phdr; } |