diff --git a/test/unit/util.c b/test/unit/util.c index 982a0ce..4d7a4e8 100644 --- a/test/unit/util.c +++ b/test/unit/util.c @@ -515,7 +515,9 @@ test_unit(void) TEST_CHECK(UTI_DoubleToNtp32f28(8.0) == htonl(0x80000000)); TEST_CHECK(UTI_DoubleToNtp32f28(16.0) == htonl(0xffffffff)); TEST_CHECK(UTI_DoubleToNtp32f28(16.1) == htonl(0xffffffff)); + TEST_CHECK(UTI_DoubleToNtp32f28(16.1) == htonl(0xffffffff)); + TEST_CHECK(UTI_Ntp32f28ToDouble(htonl(0xffffffff)) >= 65535.999); for (i = 0; i < 100000; i++) { UTI_GetRandomBytes(&ntp32_ts, sizeof (ntp32_ts)); TEST_CHECK(UTI_DoubleToNtp32(UTI_Ntp32ToDouble(ntp32_ts)) == ntp32_ts); diff --git a/util.c b/util.c index 1f66480..69f523d 100644 --- a/util.c +++ b/util.c @@ -640,7 +640,13 @@ UTI_DoubleToNtp32(double x) double UTI_Ntp32f28ToDouble(NTP_int32 x) { - return ntohl(x) / (double)(1U << 28); + uint32_t r = ntohl(x); + + /* Maximum value is special */ + if (r == 0xffffffff) + return MAX_NTP_INT32; + + return r / (double)(1U << 28); } /* ================================================== */