Skip to content

Commit b996363

Browse files
authored
Merge pull request #561 from cppalliance/to_integral_overflow
Fix potential overflows in conversions to integral types
2 parents ca2a61b + 10d8590 commit b996363

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

include/boost/decimal/detail/to_integral.hpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ constexpr auto to_integral(Decimal val) noexcept
5151

5252
auto result {static_cast<Conversion_Type>(val.full_significand())};
5353
auto expval {val.biased_exponent()};
54-
if (expval > 0)
54+
55+
if (std::abs(expval) >= 19)
56+
{
57+
result = 0;
58+
}
59+
else if (expval > 0)
5560
{
5661
result *= detail::pow10<Conversion_Type>(static_cast<Conversion_Type>(expval));
5762
}
@@ -88,7 +93,12 @@ constexpr auto to_integral_128(Decimal val) noexcept
8893

8994
auto sig {val.full_significand()};
9095
auto expval {val.biased_exponent()};
91-
if (expval > 0)
96+
97+
if (std::abs(expval) >= 38)
98+
{
99+
sig = 0;
100+
}
101+
else if (expval > 0)
92102
{
93103
sig *= detail::pow10<detail::uint128>(expval);
94104
}

0 commit comments

Comments
 (0)