From fbf403aaa45e3b74ca1868a8f4a712730dc3c386 Mon Sep 17 00:00:00 2001 From: tequ Date: Mon, 10 Nov 2025 00:55:39 +0900 Subject: [PATCH] add tests for sponsor field --- src/test/app/Sponsor_test.cpp | 37 ++++++++++++++++++++++++++ src/xrpld/app/tx/detail/Transactor.cpp | 6 ++--- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index 33e99806ab..5640f8c0ce 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -276,6 +276,41 @@ public: ter(tesSUCCESS)); } + void + testInvalidSponsorField() + { + testcase("Invalid Sponsor Field"); + using namespace test::jtx; + Env env{*this, testable_amendments()}; + Account const alice("alice"); + Account const sponsor("sponsor"); + Account const noFunded("noFunded"); + env.fund(XRP(10000), alice, sponsor); + env.close(); + + // Invalid Sponsor Account (Account = Sponsor.Account) + env(noop(alice), sponsor::as(alice), ter(temMALFORMED)); + + // Invalid Sponsor Account + // (SponsorSignature is specified but Sponsor.Account is not specified) + env(noop(alice), sig(sfSponsorSignature, sponsor), ter(temMALFORMED)); + + // Invalid Sponsor Account (Sponsor.Account doesn't exist) + env(noop(alice), + sponsor::as(noFunded, tfSponsorReserve), + ter(terNO_SPONSORSHIP)); + env(noop(alice), + sponsor::as(noFunded, tfSponsorReserve), + sig(sfSponsorSignature, noFunded), + ter(terNO_ACCOUNT)); + + // Invalid Flags + env(noop(alice), sponsor::as(sponsor, 4), ter(temINVALID_FLAG)); + env(noop(alice), + sponsor::as(sponsor, ~tfSponsorMask), + ter(temINVALID_FLAG)); + } + void testSimpleSponsorshipSet() { @@ -4513,6 +4548,8 @@ public: testSingleSigning(); testMultiSigning(); + testInvalidSponsorField(); + testSimpleSponsorshipSet(); testPreFundAndCosign(); diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index 64fb2d49af..5f95e6afc5 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -211,13 +211,13 @@ Transactor::preflight1(PreflightContext const& ctx, std::uint32_t flagMask) auto const sponsor = ctx.tx.getFieldObject(sfSponsor); if (sponsor[sfAccount] == ctx.tx[sfAccount]) { - JLOG(ctx.j.fatal()) << "preflight1: invalid sponsor account"; + JLOG(ctx.j.debug()) << "preflight1: invalid sponsor account"; return temMALFORMED; } if (!(sponsor.getFlags() & tfSponsorMask)) { - JLOG(ctx.j.fatal()) << "preflight1: invalid sponsor flags"; - return temMALFORMED; + JLOG(ctx.j.debug()) << "preflight1: invalid sponsor flags"; + return temINVALID_FLAG; } }