aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-03-08 15:00:17 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-03-12 18:42:30 +0000
commitbc61b5ca951c2cf7331e56746c46fd5a17cc57b4 (patch)
treefe49dccde790c70ca183d9517538184a9232627b /src
parentMerge pull request #5258 (diff)
downloadmonero-bc61b5ca951c2cf7331e56746c46fd5a17cc57b4.tar.xz
wallet2: don't store 0 amount outputs, they'll fail to be spent
It's better to just ignore them, the user does not really need to know they're here. If the mask is wrong, they'll fail to be used, and sweeping will fail as it tries to use it. Reported by Josh Davis.
Diffstat (limited to 'src')
-rw-r--r--src/wallet/wallet2.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 085e6075f..11be8fd6e 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -1495,11 +1495,17 @@ void wallet2::scan_output(const cryptonote::transaction &tx, bool miner_tx, cons
}
THROW_WALLET_EXCEPTION_IF(std::find(outs.begin(), outs.end(), i) != outs.end(), error::wallet_internal_error, "Same output cannot be added twice");
- outs.push_back(i);
if (tx_scan_info.money_transfered == 0 && !miner_tx)
{
tx_scan_info.money_transfered = tools::decodeRct(tx.rct_signatures, tx_scan_info.received->derivation, i, tx_scan_info.mask, m_account.get_device());
}
+ if (tx_scan_info.money_transfered == 0)
+ {
+ MERROR("Invalid output amount, skipping");
+ tx_scan_info.error = true;
+ return;
+ }
+ outs.push_back(i);
THROW_WALLET_EXCEPTION_IF(tx_money_got_in_outs[tx_scan_info.received->index] >= std::numeric_limits<uint64_t>::max() - tx_scan_info.money_transfered,
error::wallet_internal_error, "Overflow in received amounts");
tx_money_got_in_outs[tx_scan_info.received->index] += tx_scan_info.money_transfered;