]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-domain.c
Pointers into packet data should usually be pointers to unsigned 1-byte
[tcpdump] / print-domain.c
index 5a67d214cde7ec3e8c13f835cddfec1119ae61ce..8e8bbecee645416e5bbac4913e1449f9d81aed89 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.88 2003-11-16 09:36:18 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.90 2005-04-20 20:59:30 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -89,7 +89,6 @@ static const u_char *
 blabel_print(const u_char *cp)
 {
        int bitlen, slen, b;
-       int truncated = 0;
        const u_char *bitp, *lim;
        char tc;
 
@@ -98,27 +97,28 @@ blabel_print(const u_char *cp)
        if ((bitlen = *cp) == 0)
                bitlen = 256;
        slen = (bitlen + 3) / 4;
-       if ((lim = cp + 1 + slen) > snapend) {
-               truncated = 1;
-               lim = snapend;
-       }
+       lim = cp + 1 + slen;
 
        /* print the bit string as a hex string */
        printf("\\[x");
-       for (bitp = cp + 1, b = bitlen; bitp < lim && b > 7; b -= 8, bitp++)
+       for (bitp = cp + 1, b = bitlen; bitp < lim && b > 7; b -= 8, bitp++) {
+               TCHECK(*bitp);
                printf("%02x", *bitp);
-       if (bitp == lim)
-               printf("...");
-       else if (b > 4) {
+       }
+       if (b > 4) {
+               TCHECK(*bitp);
                tc = *bitp++;
                printf("%02x", tc & (0xff << (8 - b)));
        } else if (b > 0) {
+               TCHECK(*bitp);
                tc = *bitp++;
                printf("%1x", ((tc >> 4) & 0x0f) & (0x0f << (4 - b)));
        }
        printf("/%d]", bitlen);
-
-       return(truncated ? NULL : lim);
+       return lim;
+trunc:
+       printf(".../%d]", bitlen);
+       return NULL;
 }
 
 static int
@@ -131,9 +131,10 @@ labellen(const u_char *cp)
        i = *cp;
        if ((i & INDIR_MASK) == EDNS0_MASK) {
                int bitlen, elt;
-
-               if ((elt = (i & ~INDIR_MASK)) != EDNS0_ELT_BITLABEL)
+               if ((elt = (i & ~INDIR_MASK)) != EDNS0_ELT_BITLABEL) {
+                       printf("<ELT %d>", elt);
                        return(-1);
+               }
                if (!TTEST2(*(cp + 1), 1))
                        return(-1);
                if ((bitlen = *(cp + 1)) == 0)