aboutsummaryrefslogtreecommitdiffstats
path: root/editcap.c
diff options
context:
space:
mode:
authorcmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>2011-05-31 20:24:26 +0000
committercmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>2011-05-31 20:24:26 +0000
commitd8285adedf42a74d78389dc8ae77731c2bbda41b (patch)
treedc1d6ab2da34097258be191d4febf6c38eb7e366 /editcap.c
parent1d454cc504a8cbe1c850f57eb399a51efec53169 (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.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/editcap.c b/editcap.c
index fa053529aa..ae9306736e 100644
--- a/editcap.c
+++ b/editcap.c
@@ -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;
}