From cb009f30508f940f3b3f3e668753960fc02a7e9b Mon Sep 17 00:00:00 2001 From: abolz Date: Fri, 15 Jun 2018 12:59:05 +0200 Subject: [PATCH] Return infinity if binary exponent is too large --- include/rapidjson/internal/diyfp.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/rapidjson/internal/diyfp.h b/include/rapidjson/internal/diyfp.h index 85243af..7684bd8 100644 --- a/include/rapidjson/internal/diyfp.h +++ b/include/rapidjson/internal/diyfp.h @@ -20,6 +20,7 @@ #define RAPIDJSON_DIYFP_H_ #include "../rapidjson.h" +#include #if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__INTEL_COMPILER) #include @@ -146,7 +147,10 @@ struct DiyFp { // Underflow. return 0.0; } - RAPIDJSON_ASSERT(e < kDpMaxExponent); + if (e >= kDpMaxExponent) { + // Overflow. + return std::numeric_limits::infinity(); + } const uint64_t be = (e == kDpDenormalExponent && (f & kDpHiddenBit) == 0) ? 0 : static_cast(e + kDpExponentBias); u.u64 = (f & kDpSignificandMask) | (be << kDpSignificandSize);