diff --git a/src/ripple/protocol/ErrorCodes.h b/src/ripple/protocol/ErrorCodes.h index c758ace81..29673b45c 100644 --- a/src/ripple/protocol/ErrorCodes.h +++ b/src/ripple/protocol/ErrorCodes.h @@ -93,6 +93,7 @@ enum error_code_i rpcCOMMAND_MISSING, rpcDST_ACT_MALFORMED, rpcDST_ACT_MISSING, + rpcDST_ACT_NOT_FOUND, rpcDST_AMT_MALFORMED, rpcDST_AMT_MISSING, rpcDST_ISR_MALFORMED, diff --git a/src/ripple/protocol/impl/ErrorCodes.cpp b/src/ripple/protocol/impl/ErrorCodes.cpp index d83833f4f..4b78a0ff7 100644 --- a/src/ripple/protocol/impl/ErrorCodes.cpp +++ b/src/ripple/protocol/impl/ErrorCodes.cpp @@ -67,7 +67,8 @@ public: add (rpcCHANNEL_AMT_MALFORMED, "channelAmtMalformed","Payment channel amount is malformed."); add (rpcCOMMAND_MISSING, "commandMissing", "Missing command entry."); add (rpcDST_ACT_MALFORMED, "dstActMalformed", "Destination account is malformed."); - add (rpcDST_ACT_MISSING, "dstActMissing", "Destination account does not exist."); + add (rpcDST_ACT_MISSING, "dstActMissing", "Destination account not provided."); + add (rpcDST_ACT_NOT_FOUND, "dstActNotFound", "Destination account not found."); add (rpcDST_AMT_MALFORMED, "dstAmtMalformed", "Destination amount/currency/issuer is malformed."); add (rpcDST_ISR_MALFORMED, "dstIsrMalformed", "Destination issuer is malformed."); add (rpcFORBIDDEN, "forbidden", "Bad credentials."); diff --git a/src/ripple/rpc/handlers/DepositAuthorized.cpp b/src/ripple/rpc/handlers/DepositAuthorized.cpp index f0ff73180..8f0dd5052 100644 --- a/src/ripple/rpc/handlers/DepositAuthorized.cpp +++ b/src/ripple/rpc/handlers/DepositAuthorized.cpp @@ -77,11 +77,18 @@ Json::Value doDepositAuthorized (RPC::Context& context) if (!ledger) return result; + // If source account is not in the ledger it can't be authorized. + if (! ledger->exists (keylet::account(srcAcct))) + { + RPC::inject_error (rpcSRC_ACT_NOT_FOUND, result); + return result; + } + // If destination account is not in the ledger you can't deposit to it, eh? auto const sleDest = ledger->read (keylet::account(dstAcct)); if (! sleDest) { - RPC::inject_error (rpcDST_ACT_MISSING, result); + RPC::inject_error (rpcDST_ACT_NOT_FOUND, result); return result; } diff --git a/src/test/rpc/DepositAuthorized_test.cpp b/src/test/rpc/DepositAuthorized_test.cpp index 85f2853cf..688553d15 100644 --- a/src/test/rpc/DepositAuthorized_test.cpp +++ b/src/test/rpc/DepositAuthorized_test.cpp @@ -197,13 +197,23 @@ public: "json", "deposit_authorized", args.toStyledString())}; verifyErr (result, "lgrNotFound", "ledgerNotFound"); } + { + // alice is not yet funded. + Json::Value args {depositAuthArgs (alice, becky)}; + Json::Value const result {env.rpc ( + "json", "deposit_authorized", args.toStyledString())}; + verifyErr (result, "srcActNotFound", + "Source account not found."); + } + env.fund(XRP(1000), alice); + env.close(); { // becky is not yet funded. Json::Value args {depositAuthArgs (alice, becky)}; Json::Value const result {env.rpc ( "json", "deposit_authorized", args.toStyledString())}; - verifyErr (result, "dstActMissing", - "Destination account does not exist."); + verifyErr (result, "dstActNotFound", + "Destination account not found."); } env.fund(XRP(1000), becky); env.close();