mirror of
https://github.com/monero-project/monero.git
synced 2025-08-05 23:34:19 -04:00
Merge pull request #2920
bd5cce07
network_throttle: fix ineffective locking (moneromooo-monero)e0a61299
network_throttle: remove unused xxx static member (moneromooo-monero)24f584d9
cryptonote_core: remove unused functions with off by one bugs (moneromooo-monero)b1634aa3
blockchain: don't leave dangling pointers in this (moneromooo-monero)8e60b81c
cryptonote_core: fix db leak on error (moneromooo-monero)213e326c
abstract_tcp_server2: log init_server errors as fatal (moneromooo-monero)b51dc566
use const refs in for loops for non tiny types (moneromooo-monero)f0568ca6
net_parse_helpers: fix regex error checking (moneromooo-monero)b49ddc76
check accessing an element past the end of a container (moneromooo-monero)2305bf26
check return value for generate_key_derivation and derive_public_key (moneromooo-monero)a4240d9f
catch const exceptions (moneromooo-monero)45a1c4c0
add empty container sanity checks when using front() and back() (moneromooo-monero)56fa6ce1
tests: fix a buffer overread in a unit test (moneromooo-monero)b4524892
rpc: guard against json parsing a non object (moneromooo-monero)c2ed8618
easylogging++: avoid buffer underflow (moneromooo-monero)187a6ab2
epee: trap failure to parse URI from request (moneromooo-monero)061789b5
checkpoints: trap failure to load JSON checkpoints (moneromooo-monero)ba2fefb9
checkpoints: pass std::string by const ref, not const value (moneromooo-monero)38c8f4e0
mlog: terminate a string at last char, just in case (moneromooo-monero)d753d716
fix a few leaks by throwing objects, not newed pointers to objects (moneromooo-monero)fe568db8
p2p: use size_t for arbitrary counters instead of uint8_t (moneromooo-monero)46d6fa35
cryptonote_protocol: sanity check chain hashes from peer (moneromooo-monero)25584f86
cryptonote_protocol: print peer versions when unexpected (moneromooo-monero)490a5d41
rpc: do not try to use an invalid txid in relay_tx (moneromooo-monero)
This commit is contained in:
commit
2b00899bb2
39 changed files with 197 additions and 191 deletions
|
@ -497,7 +497,7 @@ namespace tools
|
|||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
bool wallet_rpc_server::validate_transfer(const std::list<wallet_rpc::transfer_destination>& destinations, const std::string& payment_id, std::vector<cryptonote::tx_destination_entry>& dsts, std::vector<uint8_t>& extra, epee::json_rpc::error& er)
|
||||
bool wallet_rpc_server::validate_transfer(const std::list<wallet_rpc::transfer_destination>& destinations, const std::string& payment_id, std::vector<cryptonote::tx_destination_entry>& dsts, std::vector<uint8_t>& extra, bool at_least_one_destination, epee::json_rpc::error& er)
|
||||
{
|
||||
crypto::hash8 integrated_payment_id = crypto::null_hash8;
|
||||
std::string extra_nonce;
|
||||
|
@ -552,6 +552,13 @@ namespace tools
|
|||
}
|
||||
}
|
||||
|
||||
if (at_least_one_destination && dsts.empty())
|
||||
{
|
||||
er.code = WALLET_RPC_ERROR_CODE_ZERO_DESTINATION;
|
||||
er.message = "No destinations for this transfer";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!payment_id.empty())
|
||||
{
|
||||
|
||||
|
@ -603,7 +610,7 @@ namespace tools
|
|||
}
|
||||
|
||||
// validate the transfer requested and populate dsts & extra
|
||||
if (!validate_transfer(req.destinations, req.payment_id, dsts, extra, er))
|
||||
if (!validate_transfer(req.destinations, req.payment_id, dsts, extra, true, er))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -613,6 +620,13 @@ namespace tools
|
|||
uint64_t mixin = m_wallet->adjust_mixin(req.mixin);
|
||||
std::vector<wallet2::pending_tx> ptx_vector = m_wallet->create_transactions_2(dsts, mixin, req.unlock_time, req.priority, extra, req.account_index, req.subaddr_indices, m_trusted_daemon);
|
||||
|
||||
if (ptx_vector.empty())
|
||||
{
|
||||
er.code = WALLET_RPC_ERROR_CODE_TX_NOT_POSSIBLE;
|
||||
er.message = "No transaction created";
|
||||
return false;
|
||||
}
|
||||
|
||||
// reject proposed transactions if there are more than one. see on_transfer_split below.
|
||||
if (ptx_vector.size() != 1)
|
||||
{
|
||||
|
@ -694,7 +708,7 @@ namespace tools
|
|||
}
|
||||
|
||||
// validate the transfer requested and populate dsts & extra; RPC_TRANSFER::request and RPC_TRANSFER_SPLIT::request are identical types.
|
||||
if (!validate_transfer(req.destinations, req.payment_id, dsts, extra, er))
|
||||
if (!validate_transfer(req.destinations, req.payment_id, dsts, extra, true, er))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -891,7 +905,7 @@ namespace tools
|
|||
destination.push_back(wallet_rpc::transfer_destination());
|
||||
destination.back().amount = 0;
|
||||
destination.back().address = req.address;
|
||||
if (!validate_transfer(destination, req.payment_id, dsts, extra, er))
|
||||
if (!validate_transfer(destination, req.payment_id, dsts, extra, true, er))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -990,7 +1004,7 @@ namespace tools
|
|||
destination.push_back(wallet_rpc::transfer_destination());
|
||||
destination.back().amount = 0;
|
||||
destination.back().address = req.address;
|
||||
if (!validate_transfer(destination, req.payment_id, dsts, extra, er))
|
||||
if (!validate_transfer(destination, req.payment_id, dsts, extra, true, er))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue