From: Guy Harris Date: Mon, 25 May 2020 09:02:34 +0000 (-0700) Subject: Squelch some warnings. X-Git-Tag: tcpdump-4.99-bp~389 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/2ba1be35231dbdad50729e544fe4c2252aa15008 Squelch some warnings. Use ND_BYTES_AVAILABLE_AFTER() to calculate the number of bytes remaining in the packet after a given pointer, rather than doing the subtraction directly; that casts the result to a u_int (we don't handle packets bigger than the maximum u_int value, so the difference between the pointers will never be bigger than that value), so we don't have to deal with it being a 64-bit value on LP64 or LLP64 systems. (It also makes it a bit clearer what we're doing). Clean up some indentation while we're at it. --- diff --git a/print-ppp.c b/print-ppp.c index 6156e195..dbd5283a 100644 --- a/print-ppp.c +++ b/print-ppp.c @@ -1413,7 +1413,7 @@ static void ppp_hdlc(netdissect_options *ndo, const u_char *p, u_int length) { - u_int caplen = ndo->ndo_snapend - p; + u_int caplen = ND_BYTES_AVAILABLE_AFTER(p); u_char *b, *t, c; const u_char *s; u_int i, proto; diff --git a/print-smb.c b/print-smb.c index 402bb71f..38a6a433 100644 --- a/print-smb.c +++ b/print-smb.c @@ -952,7 +952,7 @@ nbt_tcp_print(netdissect_options *ndo, goto trunc; if (ndo->ndo_snapend < data) goto trunc; - caplen = ndo->ndo_snapend - data; + caplen = ND_BYTES_AVAILABLE_AFTER(data); if (caplen < 4) goto trunc; maxbuf = data + caplen; @@ -1269,7 +1269,7 @@ smb_tcp_print(netdissect_options *ndo, goto trunc; if (ndo->ndo_snapend < data) goto trunc; - caplen = ndo->ndo_snapend - data; + caplen = ND_BYTES_AVAILABLE_AFTER(data); if (caplen < 4) goto trunc; maxbuf = data + caplen; diff --git a/print-zeromq.c b/print-zeromq.c index ac61056a..31d69968 100644 --- a/print-zeromq.c +++ b/print-zeromq.c @@ -169,13 +169,13 @@ static const u_char * zmtp1_print_intermediate_part(netdissect_options *ndo, const u_char *cp, const u_int len) { u_int frame_offset; - uint64_t remaining_len; + u_int remaining_len; ND_TCHECK_2(cp); frame_offset = GET_BE_U_2(cp); ND_PRINT("\n\t frame offset 0x%04x", frame_offset); cp += 2; - remaining_len = ndo->ndo_snapend - cp; /* without the frame length */ + remaining_len = ND_BYTES_AVAILABLE_AFTER(cp); /* without the frame length */ if (frame_offset == 0xFFFF) frame_offset = len - 2; /* always within the declared length */ @@ -188,14 +188,14 @@ zmtp1_print_intermediate_part(netdissect_options *ndo, const u_char *cp, const u if (frame_offset) { ND_PRINT("\n\t frame intermediate part, %u bytes", frame_offset); if (frame_offset > remaining_len) - ND_PRINT(" (%"PRIu64" captured)", remaining_len); + ND_PRINT(" (%u captured)", remaining_len); if (ndo->ndo_vflag) { - uint64_t len_printed = min(frame_offset, remaining_len); + u_int len_printed = min(frame_offset, remaining_len); if (ndo->ndo_vflag == 1) len_printed = min(VBYTES, len_printed); if (len_printed > 1) { - ND_PRINT(", first %"PRIu64" byte(s):", len_printed); + ND_PRINT(", first %u byte(s):", len_printed); hex_and_ascii_print(ndo, "\n\t ", cp, len_printed); } } diff --git a/util-print.c b/util-print.c index 8806b475..c87e3265 100644 --- a/util-print.c +++ b/util-print.c @@ -475,19 +475,22 @@ void nd_print_invalid(netdissect_options *ndo) int print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,int len) { + u_int len_to_print; + if (len < 0) { - ND_PRINT("%sDissector error: print_unknown_data called with negative length", + ND_PRINT("%sDissector error: print_unknown_data called with negative length", ident); return(0); } - if (ndo->ndo_snapend - cp < len) - len = ndo->ndo_snapend - cp; - if (len < 0) { - ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet", + len_to_print = len; + if (ndo->ndo_snapend < cp) { + ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet", ident); return(0); } - hex_print(ndo, ident,cp,len); + if (ND_BYTES_AVAILABLE_AFTER(cp) < len_to_print) + len_to_print = ND_BYTES_AVAILABLE_AFTER(cp); + hex_print(ndo, ident, cp, len_to_print); return(1); /* everything is ok */ }