Handle snaplen before choplen for consistency. Also, if chopping more bytes
authorcmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 31 May 2011 20:24:26 +0000 (20:24 +0000)
committercmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 31 May 2011 20:24:26 +0000 (20:24 +0000)
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

editcap.c

index fa053529aa8787572a980ac0c754b0e80077c62d..ae9306736ecb77e86393ca8568db1af975c68ff7 100644 (file)
--- 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;
         }