summaryrefslogtreecommitdiff
path: root/print-ipx.c
diff options
context:
space:
mode:
authorguy <guy>2005-05-06 07:56:51 +0000
committerguy <guy>2005-05-06 07:56:51 +0000
commit6191f36146f5d286304e9b6e893477fe509d83ab (patch)
tree459b721bab4a8aa77ac56d879f90aa59712321e1 /print-ipx.c
parentb2957ddee9bfd6a6bfcd4db7015e706755cecd0e (diff)
downloadtcpdump-6191f36146f5d286304e9b6e893477fe509d83ab.tar.gz
Add an "fn_printzp()" routine for printing null-padded strings (strings
with a maximum length, where a string shorter than that length is padded with NULs), as "fn_print()" won't handle the maximum length *and* the snapshot length and "fn_printn()" won't stop on a null string. Use it where appropriate. Always pass "snapend" to "fn_print()" and "fn_printn()" if they're passed a pointer into the packet data; only pass NULL if they're being handed a pointer into a buffer that's not part of the packet data. Always check the return value of "fn_print()", "fn_printn()", and "fn_printzp()" if they're passed "snapend", and do the appropriate string termination and "packet truncated" indication if they return 1.
Diffstat (limited to 'print-ipx.c')
-rw-r--r--print-ipx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/print-ipx.c b/print-ipx.c
index b5f6de6d..d5803b9d 100644
--- a/print-ipx.c
+++ b/print-ipx.c
@@ -24,7 +24,7 @@
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ipx.c,v 1.40 2004-05-26 19:57:57 guy Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ipx.c,v 1.41 2005-05-06 07:56:52 guy Exp $";
#endif
#ifdef HAVE_CONFIG_H
@@ -161,7 +161,10 @@ ipx_sap_print(const u_short *ipx, u_int length)
for (i = 0; i < 8 && length > 0; i++) {
TCHECK2(ipx[25], 10);
(void)printf(" %s '", ipxsap_string(htons(EXTRACT_16BITS(&ipx[0]))));
- fn_print((u_char *)&ipx[1], (u_char *)&ipx[1] + 48);
+ if (fn_printzp((u_char *)&ipx[1], 48, snapend)) {
+ printf("'");
+ goto trunc;
+ }
printf("' addr %s",
ipxaddr_string(EXTRACT_32BITS(&ipx[25]), (u_char *)&ipx[27]));
ipx += 32;