diff options
author | Riccardo Spagni <ric@spagni.net> | 2015-10-26 17:57:29 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2015-10-26 17:57:56 +0200 |
commit | e1c29c94ad6d42ceb2ce3516048fbfd272738b47 (patch) | |
tree | 63687d9d22b403d8b34cef3f2534bbf3b8e84023 /src/cryptonote_core/blockchain.cpp | |
parent | Merge pull request #442 (diff) | |
parent | Fix leak on real output when using a very recent output (diff) | |
download | monero-e1c29c94ad6d42ceb2ce3516048fbfd272738b47.tar.xz |
Merge pull request #444
ecbb732 Fix leak on real output when using a very recent output (moneromooo-monero)
Diffstat (limited to 'src/cryptonote_core/blockchain.cpp')
-rw-r--r-- | src/cryptonote_core/blockchain.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 99d654bb1..a594a1b05 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -1483,6 +1483,17 @@ bool Blockchain::get_random_outs_for_amounts(const COMMAND_RPC_GET_RANDOM_OUTPUT for (uint64_t amount : req.amounts) { auto num_outs = m_db->get_num_outputs(amount); + // ensure we don't include outputs that aren't yet eligible to be used + // outpouts are sorted by height + while (num_outs > 0) + { + const tx_out_index toi = m_db->get_output_tx_and_index(amount, num_outs - 1); + const uint64_t height = m_db->get_tx_block_height(toi.first); + if (height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE <= m_db->height()) + break; + --num_outs; + } + // create outs_for_amount struct and populate amount field COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& result_outs = *res.outs.insert(res.outs.end(), COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount()); result_outs.amount = amount; |