Fix #313 Assertion In Pow10.h
is triggered in Document::Parse
This commit is contained in:
parent
7f43373a12
commit
93d13ad2ac
@ -929,6 +929,11 @@ private:
|
|||||||
exp = exp * 10 + (s.Take() - '0');
|
exp = exp * 10 + (s.Take() - '0');
|
||||||
if (exp > 308 && !expMinus) // exp > 308 should be rare, so it should be checked first.
|
if (exp > 308 && !expMinus) // exp > 308 should be rare, so it should be checked first.
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, s.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, s.Tell());
|
||||||
|
else if (exp >= 429496729 && expMinus) { // Issue #313: prevent overflow exponent
|
||||||
|
while (s.Peek() >= '0' && s.Peek() <= '9') // Consume the rest of exponent
|
||||||
|
s.Take();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -226,6 +226,10 @@ static void TestParseDouble() {
|
|||||||
TEST_DOUBLE(fullPrecision, "123e34", 123e34); // Fast Path Cases In Disguise
|
TEST_DOUBLE(fullPrecision, "123e34", 123e34); // Fast Path Cases In Disguise
|
||||||
TEST_DOUBLE(fullPrecision, "45913141877270640000.0", 45913141877270640000.0);
|
TEST_DOUBLE(fullPrecision, "45913141877270640000.0", 45913141877270640000.0);
|
||||||
TEST_DOUBLE(fullPrecision, "2.2250738585072011e-308", 2.2250738585072011e-308); // http://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/
|
TEST_DOUBLE(fullPrecision, "2.2250738585072011e-308", 2.2250738585072011e-308); // http://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/
|
||||||
|
TEST_DOUBLE(fullPrecision, "1e-00011111111111", 0.0); // Issue #313
|
||||||
|
TEST_DOUBLE(fullPrecision, "-1e-00011111111111", -0.0);
|
||||||
|
TEST_DOUBLE(fullPrecision, "1e-429496729", 0.0); // Maximum supported negative exponent
|
||||||
|
|
||||||
|
|
||||||
// Since
|
// Since
|
||||||
// abs((2^-1022 - 2^-1074) - 2.2250738585072012e-308) = 3.109754131239141401123495768877590405345064751974375599... ¡Á 10^-324
|
// abs((2^-1022 - 2^-1074) - 2.2250738585072012e-308) = 3.109754131239141401123495768877590405345064751974375599... ¡Á 10^-324
|
||||||
|
Loading…
x
Reference in New Issue
Block a user