]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Have various routines for printing non-final headers for IPv4/IPv6
authorguy <guy>
Wed, 19 Nov 2003 00:36:06 +0000 (00:36 +0000)
committerguy <guy>
Wed, 19 Nov 2003 00:36:06 +0000 (00:36 +0000)
return -1 if they run out of data.

Have the IPv4 and IPv6 dissectors check for non-positive return values
from those routines and quit if they see one.

print-ah.c
print-esp.c
print-frag6.c
print-ip.c
print-ip6.c
print-ip6opts.c
print-ipcomp.c
print-rt6.c

index 6a57acf4a84c42633dba99a4a42916111575f95d..ecd106b73806d48bb3d6cfedc1504626d24ff377 100644 (file)
@@ -23,7 +23,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.21 2003-11-16 09:36:11 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ah.c,v 1.22 2003-11-19 00:36:06 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -67,5 +67,5 @@ ah_print(register const u_char *bp)
        return sizeof(struct ah) + sumlen;
  trunc:
        fputs("[|AH]", stdout);
-       return 65535;
+       return -1;
 }
index 6741e48afd246da0c9bd3aaa5f99e7521f9c2663..630b9603e0ee97572dd414a1d3a1ba8ffc22cc60 100644 (file)
@@ -23,7 +23,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.46 2003-11-16 09:36:20 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.47 2003-11-19 00:36:07 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -337,7 +337,12 @@ esp_print(const u_char *bp, const u_char *bp2
        _U_
 #endif
        ,
-       int *nhdr, int *padlen
+       int *nhdr
+#ifndef HAVE_LIBCRYPTO
+       _U_
+#endif
+       ,
+       int *padlen
 #ifndef HAVE_LIBCRYPTO
        _U_
 #endif
@@ -367,7 +372,7 @@ esp_print(const u_char *bp, const u_char *bp2
 
 #ifdef HAVE_LIBCRYPTO
        secret = NULL;
-       advance = 0;
+       padvance = 0;
 
        if (!initialized) {
                esp_init();
@@ -501,7 +506,5 @@ esp_print(const u_char *bp, const u_char *bp2
 #endif
 
 fail:
-       if (nhdr)
-               *nhdr = -1;
-       return 65536;
+       return -1;
 }
index 9153a9b1135ed682cd4eae04b2cb2647209584bf..11e884b7a2d0f79bd85d28f9188834a5f5746cb8 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.18 2003-11-16 09:36:21 guy Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.19 2003-11-19 00:36:07 guy Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -71,7 +71,7 @@ frag6_print(register const u_char *bp, register const u_char *bp2)
 #if 1
        /* it is meaningless to decode non-first fragment */
        if ((EXTRACT_16BITS(&dp->ip6f_offlg) & IP6F_OFF_MASK) != 0)
-               return 65535;
+               return -1;
        else
 #endif
        {
@@ -80,7 +80,7 @@ frag6_print(register const u_char *bp, register const u_char *bp2)
        }
 trunc:
        fputs("[|frag]", stdout);
-       return 65535;
+       return -1;
 #undef TCHECK
 }
 #endif /* INET6 */
index 3be2a6888eaa8ae9f84a11400dac30e012f5f7e6..f426722296629fe1d64ab1c5422571358a93624e 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.131 2003-11-19 00:17:32 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.132 2003-11-19 00:36:07 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -478,6 +478,8 @@ again:
                case IPPROTO_AH:
                        nh = *cp;
                        advance = ah_print(cp);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance;
                        goto again;
@@ -486,10 +488,10 @@ again:
                    {
                        int enh, padlen;
                        advance = esp_print(cp, (const u_char *)ip, &enh, &padlen);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance + padlen;
-                       if (enh < 0)
-                               break;
                        nh = enh & 0xff;
                        goto again;
                    }
@@ -498,10 +500,10 @@ again:
                    {
                        int enh;
                        advance = ipcomp_print(cp, &enh);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance;
-                       if (enh < 0)
-                               break;
                        nh = enh & 0xff;
                        goto again;
                    }
index adfd8008e3cdd9318fbd1e8ba84eb03eee426615..a566093376de615966f4dbf2cadeed82217168d6 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.35 2003-11-19 00:17:32 guy Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.36 2003-11-19 00:36:07 guy Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -81,7 +81,7 @@ ip6_print(register const u_char *bp, register u_int length)
        cp = (const u_char *)ip6;
        advance = sizeof(struct ip6_hdr);
        nh = ip6->ip6_nxt;
-       while (cp < snapend) {
+       while (cp < snapend && advance > 0) {
                cp += advance;
                len -= advance;
 
@@ -144,8 +144,6 @@ ip6_print(register const u_char *bp, register u_int length)
                    {
                        int enh, padlen;
                        advance = esp_print(cp, (const u_char *)ip6, &enh, &padlen);
-                       if (enh < 0)
-                               goto end;
                        nh = enh & 0xff;
                        len -= padlen;
                        break;
@@ -154,8 +152,6 @@ ip6_print(register const u_char *bp, register u_int length)
                    {
                        int enh;
                        advance = ipcomp_print(cp, &enh);
-                       if (enh < 0)
-                               goto end;
                        nh = enh & 0xff;
                        break;
                    }
index 759ff429e5667104454d316200432a52774ba87f..a5da63df0b9fc4d92eda780b0afc992533f6d98d 100644 (file)
@@ -33,7 +33,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-     "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.16 2003-11-16 09:36:24 guy Exp $";
+     "@(#) $Header: /tcpdump/master/tcpdump/print-ip6opts.c,v 1.17 2003-11-19 00:36:08 guy Exp $";
 #endif
 
 #ifdef INET6
@@ -305,7 +305,7 @@ hbhopt_print(register const u_char *bp)
 
   trunc:
     fputs("[|HBH]", stdout);
-    return(hbhlen);
+    return(-1);
 }
 
 int
@@ -330,6 +330,6 @@ dstopt_print(register const u_char *bp)
 
   trunc:
     fputs("[|DSTOPT]", stdout);
-    return(dstoptlen);
+    return(-1);
 }
 #endif /* INET6 */
index 89bcac708dbc4911241879417cd6341f15ddd38d..89130a373c070e5855b48f35945acff8e04cba7e 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.19 2003-11-16 09:36:24 guy Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ipcomp.c,v 1.20 2003-11-19 00:36:08 guy Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -48,7 +48,7 @@ struct ipcomp {
 #include "extract.h"
 
 int
-ipcomp_print(register const u_char *bp, int *nhdr)
+ipcomp_print(register const u_char *bp, int *nhdr _U_)
 {
        register const struct ipcomp *ipcomp;
        register const u_char *ep;
@@ -87,7 +87,5 @@ ipcomp_print(register const u_char *bp, int *nhdr)
 
 #endif
 fail:
-       if (nhdr)
-               *nhdr = -1;
-       return 65536;
+       return -1;
 }
index 063d5cd63ea741d4c0e6f9add49f4394b9f7a718..822ae7cc3a41111781324b80fadcf43742cd2372 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-rt6.c,v 1.25 2003-11-16 09:36:35 guy Exp $";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-rt6.c,v 1.26 2003-11-19 00:36:08 guy Exp $";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -102,6 +102,6 @@ rt6_print(register const u_char *bp, register const u_char *bp2)
 
  trunc:
        fputs("[|srcrt]", stdout);
-       return 65535;           /* XXX */
+       return -1;
 }
 #endif /* INET6 */