diff --git a/src/test/app/MPToken_test.cpp b/src/test/app/MPToken_test.cpp index 163ce83f897..f46b5053c6f 100644 --- a/src/test/app/MPToken_test.cpp +++ b/src/test/app/MPToken_test.cpp @@ -640,6 +640,25 @@ class MPToken_test : public beast::unit_test::suite mptAlice.pay(bob, carol, 50); } + // Holder is not authorized + { + Env env{*this, features}; + + MPTTester mptAlice(env, alice, {.holders = {&bob, &carol}}); + + mptAlice.create( + {.ownerCount = 1, .holderCount = 0, .flags = tfMPTCanTransfer}); + + // issuer to holder + mptAlice.pay(alice, bob, 100, tecNO_AUTH); + + // holder to issuer + mptAlice.pay(bob, alice, 100, tecNO_AUTH); + + // holder to holder + mptAlice.pay(bob, carol, 50, tecNO_AUTH); + } + // If allowlisting is enabled, Payment fails if the receiver is not // authorized { diff --git a/src/xrpld/ledger/detail/View.cpp b/src/xrpld/ledger/detail/View.cpp index 6021ca75688..98d8d5b59ee 100644 --- a/src/xrpld/ledger/detail/View.cpp +++ b/src/xrpld/ledger/detail/View.cpp @@ -1893,6 +1893,8 @@ rippleCredit( else return tecINSUFFICIENT_FUNDS; } + else + return tecNO_AUTH; } if (uReceiverID == issuer) @@ -1921,6 +1923,8 @@ rippleCredit( sfMPTAmount, sle->getFieldU64(sfMPTAmount) + saAmount.value()); view.update(sle); } + else + return tecNO_AUTH; } return tesSUCCESS; }