]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-sctp.c
Add some additional bounds checking.
[tcpdump] / print-sctp.c
index 37a9cc5a9ae25f3ab11f0eb3e5e75475a064e7d1..3729ee58a3ac5d6e6922bfafd2323406f076f266 100644 (file)
  * SUCH DAMAGE.
  */
 
+#ifndef lint
+static const char rcsid[] _U_ =
+"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.16 2004-12-15 08:43:23 guy Exp $ (NETLAB/PEL)";
+#endif
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #include "extract.h"                   /* must come after interface.h */
 #include "ip.h"
 #ifdef INET6
-#ifndef lint
-static const char rcsid[] _U_ =
-"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.14 2003-11-15 00:39:39 guy Exp $ (NETLAB/PEL)";
-#endif
 #include "ip6.h"
 #endif
 
@@ -74,6 +74,7 @@ void sctp_print(const u_char *bp,        /* beginning of sctp packet */
   int chunkCount;
   const struct sctpChunkDesc *chunkDescPtr;
   const void *nextChunk;
+  const char *sep;
 
   sctpPktHdr = (const struct sctpHeader*) bp;
   endPacketPtr = (const u_char*)sctpPktHdr+sctpPacketLength;
@@ -125,9 +126,10 @@ void sctp_print(const u_char *bp,        /* beginning of sctp packet */
   }
   fflush(stdout);
 
-  if (vflag < 2)
-       return;
-
+  if (vflag >= 2)
+    sep = "\n\t";
+  else
+    sep = " (";
   /* cycle through all chunks, printing information on each one */
   for (chunkCount = 0,
         chunkDescPtr = (const struct sctpChunkDesc *)
@@ -150,7 +152,7 @@ void sctp_print(const u_char *bp,        /* beginning of sctp packet */
 
       nextChunk = (const void *) (chunkEnd + align);
 
-      printf("\n\t%d) ", chunkCount+1);
+      printf("%s%d) ", sep, chunkCount+1);
       switch (chunkDescPtr->chunkID)
        {
        case SCTP_DATA :
@@ -189,7 +191,7 @@ void sctp_print(const u_char *bp,        /* beginning of sctp packet */
            printf("[PPID 0x%x] ", EXTRACT_32BITS(&dataHdrPtr->payloadtype));
            fflush(stdout);
 
-           if (vflag)          /* if verbose output is specified */
+           if (vflag >= 2)        /* if verbose output is specified */
              {                    /* at the command line */
                const u_char *payloadPtr;
 
@@ -341,5 +343,8 @@ void sctp_print(const u_char *bp,        /* beginning of sctp packet */
          printf("[Unknown chunk type: 0x%x]", chunkDescPtr->chunkID);
          return;
        }
+
+       if (vflag < 2)
+         sep = ", (";
     }
 }