From d057f07d0e458c2335c5e9e434ca182ae418745c Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 30 Apr 2026 10:05:28 +0900 Subject: [PATCH] fix: setSponsorFieldU32 silently clamps to 0 on underflow instead of failing --- .../tx/transactors/Sponsor/SponsorshipTransfer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libxrpl/tx/transactors/Sponsor/SponsorshipTransfer.cpp b/src/libxrpl/tx/transactors/Sponsor/SponsorshipTransfer.cpp index 695d1b7c1c..43289e7181 100644 --- a/src/libxrpl/tx/transactors/Sponsor/SponsorshipTransfer.cpp +++ b/src/libxrpl/tx/transactors/Sponsor/SponsorshipTransfer.cpp @@ -411,7 +411,13 @@ SponsorshipTransfer::doApply() auto const setSponsorFieldU32 = [](auto const& sle, auto const& field, auto const& delta) { int32_t const newValue = static_cast(sle->getFieldU32(field)) + delta; - if (newValue <= 0) + + if (newValue < 0) + { + UNREACHABLE("xrpl::SponsorshipTransfer::doApply : Invalid sponsor field value"); + return; + } + else if (newValue == 0) { sle->makeFieldAbsent(field); }