diff options
author | fenner <fenner> | 2004-03-23 19:03:03 +0000 |
---|---|---|
committer | fenner <fenner> | 2004-03-23 19:03:03 +0000 |
commit | 5da3b647ac20b9cc75ffe00a55044516b2d7d2bd (patch) | |
tree | c70aaeab2df1c5ce37553ad4064d3e94550cdf84 /print-domain.c | |
parent | 3f07fce71656231fa5fd170c1c7d54b71a648b71 (diff) | |
download | tcpdump-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.c | 24 |
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 |