summaryrefslogtreecommitdiff
path: root/print-domain.c
diff options
context:
space:
mode:
authorfenner <fenner>2004-03-23 19:03:03 +0000
committerfenner <fenner>2004-03-23 19:03:03 +0000
commit5da3b647ac20b9cc75ffe00a55044516b2d7d2bd (patch)
treec70aaeab2df1c5ce37553ad4064d3e94550cdf84 /print-domain.c
parent3f07fce71656231fa5fd170c1c7d54b71a648b71 (diff)
downloadtcpdump-5da3b647ac20b9cc75ffe00a55044516b2d7d2bd.tar.gz
Rewrite bitstring truncation check; it would incorrectly trigger
on a query like IP 127.0.0.1.49859 > 127.0.0.1.53: 13041+ PTR? \[xdead000000000000000000000000beef/128].ip6.arpa. (44)
Diffstat (limited to 'print-domain.c')
-rw-r--r--print-domain.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/print-domain.c b/print-domain.c
index 5a67d214..0e152e8c 100644
--- a/print-domain.c
+++ b/print-domain.c
@@ -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.89 2004-03-23 19:03:03 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