X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c4aa80257a677a7642881f602c0462ba8944e662..5c77a341d4e766eef8beebaecd9e69bd2cc7b59b:/print-sctp.c diff --git a/print-sctp.c b/print-sctp.c index cb6c4d67..2d03a579 100644 --- a/print-sctp.c +++ b/print-sctp.c @@ -34,8 +34,8 @@ */ #ifndef lint -static const char rcsid[] = -"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.12 2003-06-03 23:49:23 guy Exp $ (NETLAB/PEL)"; +static const char rcsid[] _U_ = +"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.15 2003-11-16 09:36:36 guy Exp $ (NETLAB/PEL)"; #endif #ifdef HAVE_CONFIG_H @@ -198,9 +198,17 @@ void sctp_print(const u_char *bp, /* beginning of sctp packet */ if (!xflag && !qflag) { payloadPtr = (const u_char *) (++dataHdrPtr); printf(":"); + if (htons(chunkDescPtr->chunkLength) < + sizeof(struct sctpDataPart)+ + sizeof(struct sctpChunkDesc)+1) { + printf("bogus chunk length %u]", + htons(chunkDescPtr->chunkLength)); + return; + } default_print(payloadPtr, - htons(chunkDescPtr->chunkLength)-1 - - sizeof(struct sctpDataPart)-sizeof(struct sctpChunkDesc)); + htons(chunkDescPtr->chunkLength) - + (sizeof(struct sctpDataPart)+ + sizeof(struct sctpChunkDesc)+1)); } else printf("]"); }