From 31bc25973a612d451f7477f679b9f79640f2f4fb Mon Sep 17 00:00:00 2001 From: tequ Date: Mon, 13 Apr 2026 15:55:16 +0900 Subject: [PATCH] fix SponsorshipSet Update FeeAmount Lacks Reserve Floor Check --- src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp | 10 ++++++++++ src/test/app/Sponsor_test.cpp | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp index 376cb6afc6..28f9029721 100644 --- a/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp +++ b/src/libxrpl/tx/transactors/Sponsor/SponsorshipSet.cpp @@ -295,6 +295,16 @@ SponsorshipSet::doApply() (*sponsorObjSle).makeFieldAbsent(sfFeeAmount); else (*sponsorObjSle).setFieldAmount(sfFeeAmount, *feeAmount); + + if (auto const ret = checkInsufficientReserve( + ctx_.view(), + ctx_.tx, + sponsorAccSle, + STAmount{(*sponsorAccSle)[sfBalance]}.xrp(), + reserveSponsorAccSle, + 0); + !isTesSuccess(ret)) + return tecUNFUNDED; } } diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index cad1892fca..41b5e88b65 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -256,6 +256,16 @@ public: fee(XRP(1)), ter(tecUNFUNDED)); env.close(); + + // Increasing feeAmount to reach insufficient reserve + auto const currentFeeAmount = + env.le(keylet::sponsor(sponsor.id(), alice.id()))->getFieldAmount(sfFeeAmount).xrp(); + adjustAccountXRPBalance(env, sponsor, XRP(310)); + env(sponsor::set_fee(sponsor, 0, currentFeeAmount + XRP(309)), + sponsor::sponseeAcc(alice), + fee(XRP(1)), + ter(tecUNFUNDED)); + env.close(); } void