X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c9dce66aa12811902b7c45c660e889b12a518de8..69f03c1c03b280b9c5863bfb47e8847d59b4ee6b:/print-zep.c diff --git a/print-zep.c b/print-zep.c index 1e34c215..b18437f0 100644 --- a/print-zep.c +++ b/print-zep.c @@ -27,6 +27,7 @@ #include "netdissect-stdinc.h" +#define ND_LONGJMP_FROM_TCHECK #include "netdissect.h" #include "extract.h" @@ -76,20 +77,17 @@ static void zep_print_ts(netdissect_options *ndo, const u_char *p) billion */ ND_PRINT("%u.%09d", i, f); -#ifdef HAVE_STRFTIME /* * print the time in human-readable format. */ if (i) { time_t seconds = i - JAN_1970; - struct tm *tm; char time_buf[128]; - tm = localtime(&seconds); - strftime(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S", tm); - ND_PRINT(" (%s)", time_buf); + ND_PRINT(" (%s)", + nd_format_time(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S", + localtime(&seconds))); } -#endif } /* @@ -107,8 +105,6 @@ zep_print(netdissect_options *ndo, nd_print_protocol_caps(ndo); - ND_TCHECK_LEN(bp, 8); - /* Preamble Code (must be "EX") */ if (GET_U_1(bp) != 'E' || GET_U_1(bp + 1) != 'X') { ND_PRINT(" [Preamble Code: "); @@ -124,7 +120,7 @@ zep_print(netdissect_options *ndo, if (version == 1) { /* ZEP v1 packet. */ - ND_TCHECK_LEN(bp, 16); + ND_ICHECK_U(len, <, 16); ND_PRINT("Channel ID %u, Device ID 0x%04x, ", GET_U_1(bp + 3), GET_BE_U_2(bp + 4)); if (GET_U_1(bp + 6)) @@ -140,6 +136,7 @@ zep_print(netdissect_options *ndo, /* ZEP v2 packet. */ if (GET_U_1(bp + 3) == 2) { /* ZEP v2 ack. */ + ND_ICHECK_U(len, <, 8); seq_no = GET_BE_U_4(bp + 4); ND_PRINT("ACK, seq# = %u", seq_no); inner_len = 0; @@ -147,8 +144,7 @@ zep_print(netdissect_options *ndo, len -= 8; } else { /* ZEP v2 data, or some other. */ - ND_TCHECK_LEN(bp, 32); - + ND_ICHECK_U(len, <, 32); ND_PRINT("Type %u, Channel ID %u, Device ID 0x%04x, ", GET_U_1(bp + 3), GET_U_1(bp + 4), GET_BE_U_2(bp + 5)); @@ -171,6 +167,7 @@ zep_print(netdissect_options *ndo, /* Call 802.15.4 dissector. */ ND_PRINT("\n\t"); if (ieee802_15_4_print(ndo, bp, inner_len)) { + ND_TCHECK_LEN(bp, len); bp += len; len = 0; } @@ -178,8 +175,7 @@ zep_print(netdissect_options *ndo, if (!ndo->ndo_suppress_default_print) ND_DEFAULTPRINT(bp, len); - return; - trunc: - nd_print_trunc(ndo); +invalid: + nd_print_invalid(ndo); }