X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/f67e46a634dd3bdcefa9fc09dbef6baae1b1d1ed..296d466cd6bbf2f7e75e15bb6a01268e88c76ed0:/print-ip.c diff --git a/print-ip.c b/print-ip.c index 5edc6221..a332bd78 100644 --- a/print-ip.c +++ b/print-ip.c @@ -358,9 +358,11 @@ ip_print(netdissect_options *ndo, ND_TCHECK_SIZE(ip); /* - * Cut off the snapshot length to the end of the IP payload. + * Cut off the snapshot length to the end of the IP payload + * or the end of the data in which it's contained, whichever + * comes first. */ - if (!nd_push_snaplen(ndo, bp, len)) { + if (!nd_push_snaplen(ndo, bp, ND_MIN(length, len))) { (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: can't push snaplen on buffer stack", __func__); } @@ -414,7 +416,7 @@ ip_print(netdissect_options *ndo, else ND_PRINT(", length %u", GET_BE_U_2(ip->ip_len)); - if ((hlen - sizeof(struct ip)) > 0) { + if ((hlen > sizeof(struct ip))) { ND_PRINT(", options ("); if (ip_optprint(ndo, (const u_char *)(ip + 1), hlen - sizeof(struct ip)) == -1) {