]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ntp.c
Handle very large -f files by rejecting them.
[tcpdump] / print-ntp.c
index 908c536059d8a6b27ca2e7c6f75c2206f9e86a25..0689264ff74bbe8fb31ce051a3bab99612394a11 100644 (file)
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * Format and print ntp packets.
  *     By Jeffrey Mogul/DECWRL
  *     loosely based on print-bootp.c
  */
 
+/* \summary: Network Time Protocol (NTP) printer */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -326,16 +327,16 @@ p_sfix(netdissect_options *ndo,
 {
        register int i;
        register int f;
-       register float ff;
+       register double ff;
 
        i = EXTRACT_16BITS(&sfp->int_part);
        f = EXTRACT_16BITS(&sfp->fraction);
-       ff = f / 65536.0f;      /* shift radix point by 16 bits */
-       f = ff * 1000000.0f;    /* Treat fraction as parts per million */
+       ff = f / 65536.0;               /* shift radix point by 16 bits */
+       f = (int)(ff * 1000000.0);      /* Treat fraction as parts per million */
        ND_PRINT((ndo, "%d.%06d", i, f));
 }
 
-#define        FMAXINT (4294967296.0f) /* floating point rep. of MAXINT */
+#define        FMAXINT (4294967296.0 /* floating point rep. of MAXINT */
 
 static void
 p_ntp_time(netdissect_options *ndo,
@@ -344,15 +345,15 @@ p_ntp_time(netdissect_options *ndo,
        register int32_t i;
        register uint32_t uf;
        register uint32_t f;
-       register float ff;
+       register double ff;
 
        i = EXTRACT_32BITS(&lfp->int_part);
        uf = EXTRACT_32BITS(&lfp->fraction);
        ff = uf;
-       if (ff < 0.0f)          /* some compilers are buggy */
+       if (ff < 0.0          /* some compilers are buggy */
                ff += FMAXINT;
-       ff = ff / FMAXINT;      /* shift radix point by 32 bits */
-       f = ff * 1000000000.0f; /* treat fraction as parts per billion */
+       ff = ff / FMAXINT;                      /* shift radix point by 32 bits */
+       f = (uint32_t)(ff * 1000000000.0);      /* treat fraction as parts per billion */
        ND_PRINT((ndo, "%u.%09d", i, f));
 
 #ifdef HAVE_STRFTIME
@@ -381,7 +382,7 @@ p_ntp_delta(netdissect_options *ndo,
        register uint32_t u, uf;
        register uint32_t ou, ouf;
        register uint32_t f;
-       register float ff;
+       register double ff;
        int signbit;
 
        u = EXTRACT_32BITS(&lfp->int_part);
@@ -417,10 +418,10 @@ p_ntp_delta(netdissect_options *ndo,
        }
 
        ff = f;
-       if (ff < 0.0f)          /* some compilers are buggy */
+       if (ff < 0.0          /* some compilers are buggy */
                ff += FMAXINT;
-       ff = ff / FMAXINT;      /* shift radix point by 32 bits */
-       f = ff * 1000000000.0f; /* treat fraction as parts per billion */
+       ff = ff / FMAXINT;                      /* shift radix point by 32 bits */
+       f = (uint32_t)(ff * 1000000000.0);      /* treat fraction as parts per billion */
        ND_PRINT((ndo, "%s%d.%09d", signbit ? "-" : "+", i, f));
 }