diff --git a/double-conversion/fixed-dtoa.cc b/double-conversion/fixed-dtoa.cc index e06617bf..0f55a0b6 100644 --- a/double-conversion/fixed-dtoa.cc +++ b/double-conversion/fixed-dtoa.cc @@ -259,6 +259,7 @@ static void FillFractionals(uint64_t fractionals, int exponent, fractionals -= static_cast(digit) << point; } // If the first bit after the point is set we have to round up. + ASSERT(fractionals == 0 || point - 1 >= 0); if ((fractionals != 0) && ((fractionals >> (point - 1)) & 1) == 1) { RoundUp(buffer, length, decimal_point); } diff --git a/test/cctest/test-fixed-dtoa.cc b/test/cctest/test-fixed-dtoa.cc index 5ffac581..e66f3890 100644 --- a/test/cctest/test-fixed-dtoa.cc +++ b/test/cctest/test-fixed-dtoa.cc @@ -485,6 +485,10 @@ TEST(FastFixedVariousDoubles) { buffer, &length, &point)); CHECK_EQ("1000000000000000128", buffer.start()); CHECK_EQ(19, point); + + CHECK(FastFixedDtoa(2.10861548515811875e+15, 17, buffer, &length, &point)); + CHECK_EQ("210861548515811875", buffer.start()); + CHECK_EQ(16, point); }