diff --git a/src/xrpld/app/tx/detail/VaultClawback.cpp b/src/xrpld/app/tx/detail/VaultClawback.cpp index aae03247ab..c353b2a4df 100644 --- a/src/xrpld/app/tx/detail/VaultClawback.cpp +++ b/src/xrpld/app/tx/detail/VaultClawback.cpp @@ -176,6 +176,16 @@ VaultClawback::doApply() if (auto ter = accountSend(view(), vaultAccount, account_, assets, j_)) return ter; + // Sanity check + if (accountHolds( + view(), + vaultAccount, + assets.asset(), + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j_) < beast::zero) + return tefINTERNAL; + return tesSUCCESS; } diff --git a/src/xrpld/app/tx/detail/VaultDeposit.cpp b/src/xrpld/app/tx/detail/VaultDeposit.cpp index 4c43f3a802..ec9dcb0c9b 100644 --- a/src/xrpld/app/tx/detail/VaultDeposit.cpp +++ b/src/xrpld/app/tx/detail/VaultDeposit.cpp @@ -177,6 +177,16 @@ VaultDeposit::doApply() view(), account_, vaultAccount, assets, j_, WaiveTransferFee::Yes)) return ter; + // Sanity check + if (accountHolds( + view(), + account_, + assets.asset(), + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j_) < beast::zero) + return tefINTERNAL; + // Transfer shares from vault to depositor. if (auto ter = accountSend( view(), vaultAccount, account_, shares, j_, WaiveTransferFee::Yes)) diff --git a/src/xrpld/app/tx/detail/VaultWithdraw.cpp b/src/xrpld/app/tx/detail/VaultWithdraw.cpp index d4a032d9af..fe3e30a0c9 100644 --- a/src/xrpld/app/tx/detail/VaultWithdraw.cpp +++ b/src/xrpld/app/tx/detail/VaultWithdraw.cpp @@ -181,6 +181,16 @@ VaultWithdraw::doApply() view(), vaultAccount, dstAcct, assets, j_, WaiveTransferFee::Yes)) return ter; + // Sanity check + if (accountHolds( + view(), + vaultAccount, + assets.asset(), + FreezeHandling::fhIGNORE_FREEZE, + AuthHandling::ahIGNORE_AUTH, + j_) < beast::zero) + return tefINTERNAL; + return tesSUCCESS; }