diff options
author | cmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-05-31 20:24:26 +0000 |
---|---|---|
committer | cmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-05-31 20:24:26 +0000 |
commit | d8285adedf42a74d78389dc8ae77731c2bbda41b (patch) | |
tree | dc1d6ab2da34097258be191d4febf6c38eb7e366 /editcap.c | |
parent | 1d454cc504a8cbe1c850f57eb399a51efec53169 (diff) |
Handle snaplen before choplen for consistency. Also, if chopping more bytes
than present, just chop all by setting caplen to 0. In all cases, don't touch
len. In other words, change incl_len but leave orig_len alone.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@37488 f5534014-38df-0310-8fa8-9805f1628bb7
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; } |