diff options
author | pkelsey <pkelsey@FreeBSD.org> | 2015-07-08 16:19:32 +0000 |
---|---|---|
committer | pkelsey <pkelsey@FreeBSD.org> | 2015-07-08 16:19:32 +0000 |
commit | 7e965066ede451d7a551dd68d6c59acf32e4846e (patch) | |
tree | f0c2243cc0a2a59f3eb1354ba3987d4cbcb788bc /contrib/tcpdump/print-ascii.c | |
parent | 732211dc794db586649eabfc1d517b8a477440f5 (diff) | |
parent | c2704d8ede887d9fe69a9a11fe0755b09ec6895d (diff) | |
download | FreeBSD-src-7e965066ede451d7a551dd68d6c59acf32e4846e.zip FreeBSD-src-7e965066ede451d7a551dd68d6c59acf32e4846e.tar.gz |
MFV r285191: tcpdump 4.7.4.
Also, the changes made in r272451 and r272653 that were lost in the
merge of 4.6.2 (r276788) have been restored.
PR: 199568
Differential Revision: https://reviews.freebsd.org/D3007
Reviewed by: brooks, hiren
Approved by: jmallett (mentor)
MFC after: 1 month
Diffstat (limited to 'contrib/tcpdump/print-ascii.c')
-rw-r--r-- | contrib/tcpdump/print-ascii.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/contrib/tcpdump/print-ascii.c b/contrib/tcpdump/print-ascii.c index 96410da..3cefef3 100644 --- a/contrib/tcpdump/print-ascii.c +++ b/contrib/tcpdump/print-ascii.c @@ -57,8 +57,12 @@ void ascii_print(netdissect_options *ndo, const u_char *cp, u_int length) { + u_int caplength; register u_char s; + caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0; + if (length > caplength) + length = caplength; ND_PRINT((ndo, "\n")); while (length > 0) { s = *cp++; @@ -89,12 +93,16 @@ void hex_and_ascii_print_with_offset(netdissect_options *ndo, register const char *ident, register const u_char *cp, register u_int length, register u_int oset) { + u_int caplength; register u_int i; register int s1, s2; register int nshorts; char hexstuff[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp; char asciistuff[ASCII_LINELENGTH+1], *asp; + caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0; + if (length > caplength) + length = caplength; nshorts = length / sizeof(u_short); i = 0; hsp = hexstuff; asp = asciistuff; @@ -147,9 +155,13 @@ hex_print_with_offset(netdissect_options *ndo, const char *ident, const u_char *cp, u_int length, u_int oset) { + u_int caplength; register u_int i, s; register int nshorts; + caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0; + if (length > caplength) + length = caplength; nshorts = (u_int) length / sizeof(u_short); i = 0; while (--nshorts >= 0) { |