diff --git a/include/rapidjson/internal/diyfp.h b/include/rapidjson/internal/diyfp.h index 29abf80..cd941fa 100644 --- a/include/rapidjson/internal/diyfp.h +++ b/include/rapidjson/internal/diyfp.h @@ -99,6 +99,7 @@ struct DiyFp { } DiyFp Normalize() const { + RAPIDJSON_ASSERT(f != 0); // https://stackoverflow.com/a/26809183/291737 #if defined(_MSC_VER) && defined(_M_AMD64) unsigned long index; _BitScanReverse64(&index, f); diff --git a/test/unittest/readertest.cpp b/test/unittest/readertest.cpp index e530801..c487ff9 100644 --- a/test/unittest/readertest.cpp +++ b/test/unittest/readertest.cpp @@ -207,6 +207,7 @@ static void TestParseDouble() { TEST_DOUBLE(fullPrecision, "0.0", 0.0); TEST_DOUBLE(fullPrecision, "-0.0", -0.0); // For checking issue #289 + TEST_DOUBLE(fullPrecision, "0e100", 0.0); // Normalize() must not invoke __builtin_clzll(0) TEST_DOUBLE(fullPrecision, "1.0", 1.0); TEST_DOUBLE(fullPrecision, "-1.0", -1.0); TEST_DOUBLE(fullPrecision, "1.5", 1.5);