diff --git a/include/boost/json/basic_parser_impl.hpp b/include/boost/json/basic_parser_impl.hpp index 071a224c9..13ce2c87b 100644 --- a/include/boost/json/basic_parser_impl.hpp +++ b/include/boost/json/basic_parser_impl.hpp @@ -155,6 +155,11 @@ dec_to_float( if(neg) x = -x; + // pow10 returns infinity for large exponents, + // and zero times infinity is NaN + if(m == 0) + return x; + if(e < -305) { x *= 1e-305 ; diff --git a/test/double.cpp b/test/double.cpp index 0b13c7f8e..bc657ee2b 100644 --- a/test/double.cpp +++ b/test/double.cpp @@ -315,6 +315,8 @@ class double_test grind_double("-0.010", -0.01); grind_double("-0.0", -0.0); grind_double("-0e0", -0.0); + grind_double( "0e400", 0.0); + grind_double("-0e400", -0.0); grind_double( "18.4", 18.4); grind_double("-18.4", -18.4); grind_double( "18446744073709551616", 1.8446744073709552e+19);