Update from_multiplier () overflow checks (#2337)
This commit is contained in:
parent
16f00cb14e
commit
7a81bce13b
1 changed files with 13 additions and 2 deletions
|
|
@ -915,8 +915,19 @@ std::string nano::to_string (double const value_a, int const precision_a)
|
||||||
uint64_t nano::difficulty::from_multiplier (double const multiplier_a, uint64_t const base_difficulty_a)
|
uint64_t nano::difficulty::from_multiplier (double const multiplier_a, uint64_t const base_difficulty_a)
|
||||||
{
|
{
|
||||||
assert (multiplier_a > 0.);
|
assert (multiplier_a > 0.);
|
||||||
uint64_t reverse_difficulty (static_cast<uint64_t> ((-base_difficulty_a) / multiplier_a));
|
nano::uint128_t reverse_difficulty ((-base_difficulty_a) / multiplier_a);
|
||||||
return (reverse_difficulty != 0 || base_difficulty_a == 0 || multiplier_a < 1. ? -reverse_difficulty : std::numeric_limits<std::uint64_t>::max ());
|
if (reverse_difficulty > std::numeric_limits<std::uint64_t>::max ())
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (reverse_difficulty != 0 || base_difficulty_a == 0 || multiplier_a < 1.)
|
||||||
|
{
|
||||||
|
return -(static_cast<uint64_t> (reverse_difficulty));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return std::numeric_limits<std::uint64_t>::max ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double nano::difficulty::to_multiplier (uint64_t const difficulty_a, uint64_t const base_difficulty_a)
|
double nano::difficulty::to_multiplier (uint64_t const difficulty_a, uint64_t const base_difficulty_a)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue