diff --git a/src/xrpld/app/tx/detail/VaultDeposit.cpp b/src/xrpld/app/tx/detail/VaultDeposit.cpp index 8ffcc70842..93b41df4df 100644 --- a/src/xrpld/app/tx/detail/VaultDeposit.cpp +++ b/src/xrpld/app/tx/detail/VaultDeposit.cpp @@ -152,12 +152,11 @@ VaultDeposit::doApply() return tefINTERNAL; auto const& vaultAccount = vault->at(sfAccount); - MPTIssue const mptIssue(mptIssuanceID); // Note, vault owner is always authorized if ((vault->getFlags() & tfVaultPrivate) && account_ != vault->at(sfOwner)) { if (auto const err = enforceMPTokenAuthorization( - ctx_.view(), mptIssue, account_, mPriorBalance, j_); + ctx_.view(), mptIssuanceID, account_, mPriorBalance, j_); !isTesSuccess(err)) return err; } diff --git a/src/xrpld/app/tx/detail/VaultWithdraw.cpp b/src/xrpld/app/tx/detail/VaultWithdraw.cpp index 2e3f708a73..7e21141b84 100644 --- a/src/xrpld/app/tx/detail/VaultWithdraw.cpp +++ b/src/xrpld/app/tx/detail/VaultWithdraw.cpp @@ -48,12 +48,9 @@ VaultWithdraw::preflight(PreflightContext const& ctx) if (ctx.tx[sfAmount] <= beast::zero) return temBAD_AMOUNT; - if (ctx.tx.isFieldPresent(sfDestination)) - { - if (auto const dstAccountID = ctx.tx.getAccountID(sfDestination); - dstAccountID == beast::zero) - return temMALFORMED; - } + if (auto const destination = ctx.tx[~sfDestination]; + destination && *destination == beast::zero) + return temMALFORMED; return preflight2(ctx); } diff --git a/src/xrpld/ledger/View.h b/src/xrpld/ledger/View.h index dbdabccf37..bd2c5f05a9 100644 --- a/src/xrpld/ledger/View.h +++ b/src/xrpld/ledger/View.h @@ -753,7 +753,7 @@ requireAuth( [[nodiscard]] TER enforceMPTokenAuthorization( ApplyView& view, - MPTIssue const& mptIssue, + MPTID const& mptIssuanceID, AccountID const& account, XRPAmount const& priorBalance, beast::Journal j); diff --git a/src/xrpld/ledger/detail/View.cpp b/src/xrpld/ledger/detail/View.cpp index f3367b8e1e..65d5d5ccae 100644 --- a/src/xrpld/ledger/detail/View.cpp +++ b/src/xrpld/ledger/detail/View.cpp @@ -2360,22 +2360,21 @@ requireAuth( [[nodiscard]] TER enforceMPTokenAuthorization( ApplyView& view, - MPTIssue const& mptIssue, + MPTID const& mptIssuanceID, AccountID const& account, XRPAmount const& priorBalance, // for MPToken authorization beast::Journal j) { - auto const mptIssuanceID = mptIssue.getMptID(); auto const sleIssuance = view.read(keylet::mptIssuance(mptIssuanceID)); if (!sleIssuance) - return tefINTERNAL; + return tefINTERNAL; // LCOV_EXCL_LINE XRPL_ASSERT( sleIssuance->isFlag(lsfMPTRequireAuth), "ripple::enforceMPTokenAuthorization : authorization required"); if (account == sleIssuance->at(sfIssuer)) - return tesSUCCESS; // Won't create MPToken for the token issuer + return tefINTERNAL; // LCOV_EXCL_LINE auto const keylet = keylet::mptoken(mptIssuanceID, account); auto const sleToken = view.read(keylet); // NOTE: might be null