]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Rewrite bitstring truncation check; it would incorrectly trigger
authorfenner <fenner>
Sun, 28 Mar 2004 20:54:00 +0000 (20:54 +0000)
committerfenner <fenner>
Sun, 28 Mar 2004 20:54:00 +0000 (20:54 +0000)
 on a query like
 IP 127.0.0.1.49859 > 127.0.0.1.53:  13041+ PTR? \[xdead000000000000000000000000beef/128].ip6.arpa. (44)

print-domain.c

index bb96362e39f1a6ffd24c567811825e522cb1ac29..86f7977f23763c03ac5bca850e79f017448a2030 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.86.2.2 2003-11-16 08:51:17 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.86.2.3 2004-03-28 20:54:00 fenner 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