summaryrefslogtreecommitdiff
path: root/print-ascii.c
diff options
context:
space:
mode:
authorPatrick Kelsey <pkelsey@FreeBSD.org>2015-07-06 02:16:08 +0000
committerPatrick Kelsey <pkelsey@FreeBSD.org>2015-07-06 02:16:08 +0000
commit7041091186ddb72670e3e2d8254859ed31d3f2e6 (patch)
treea4829ce6205db3fdb0e6cebd0d396f5c4094bb3b /print-ascii.c
parentd3b6650ba68c44e3a488aac17bbe56d0cd0e870d (diff)
Diffstat (limited to 'print-ascii.c')
-rw-r--r--print-ascii.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/print-ascii.c b/print-ascii.c
index 96410da8faf65..3cefef33aeb4f 100644
--- a/print-ascii.c
+++ b/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) {