fix(consensus): avoid NegativeUNL cap overflow

This commit is contained in:
Nicholas Dudfield
2026-06-26 10:26:47 +07:00
parent 4fb91ea9f5
commit aee3a638ee
2 changed files with 9 additions and 2 deletions

View File

@@ -27,6 +27,8 @@
#include <xrpl/basics/Log.h>
#include <xrpl/beast/unit_test.h>
#include <limits>
namespace ripple {
namespace test {
@@ -1625,6 +1627,11 @@ class NegativeUNLVoteMaxListed_test : public beast::unit_test::suite
BEAST_EXPECT(NegativeUNLVote::maxNegativeUNLListed(8) == 2);
BEAST_EXPECT(NegativeUNLVote::maxNegativeUNLListed(9) == 3);
BEAST_EXPECT(NegativeUNLVote::maxNegativeUNLListed(32) == 8);
auto const max = std::numeric_limits<std::size_t>::max();
BEAST_EXPECT(
NegativeUNLVote::maxNegativeUNLListed(max) ==
max / NegativeUNLVote::negativeUNLMaxListedDenominator + 1);
}
void

View File

@@ -84,8 +84,8 @@ public:
static constexpr size_t
maxNegativeUNLListed(size_t unlSize)
{
return (unlSize + negativeUNLMaxListedDenominator - 1) /
negativeUNLMaxListedDenominator;
return unlSize / negativeUNLMaxListedDenominator +
(unlSize % negativeUNLMaxListedDenominator == 0 ? 0 : 1);
}
/**