From ed71a89138fae51c53f86d6f996c75c130a9353d Mon Sep 17 00:00:00 2001 From: Crypto City Date: Sun, 19 Mar 2023 07:35:06 +0000 Subject: [PATCH] wallet2: fix outdated wallet check it was mistaking the number of forks in the fork table for the last fork, and assuming the table was including every single fork --- src/wallet/wallet2.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 27d306b36..0a1d9d074 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2945,16 +2945,20 @@ void check_block_hard_fork_version(cryptonote::network_type nettype, uint8_t hf_ const hardfork_t *wallet_hard_forks = nettype == TESTNET ? testnet_hard_forks : nettype == STAGENET ? stagenet_hard_forks : mainnet_hard_forks; - wallet_is_outdated = static_cast(hf_version) > wallet_num_hard_forks; + wallet_is_outdated = hf_version > wallet_hard_forks[wallet_num_hard_forks-1].version; if (wallet_is_outdated) return; // check block's height falls within wallet's expected range for block's given version - // Wownero version 7 starts from block 0 - uint64_t start_height = hf_version == 7 ? 0 : wallet_hard_forks[hf_version - 7].height; - uint64_t end_height = static_cast(hf_version) + 1 > wallet_num_hard_forks + size_t fork_index; + for (fork_index = 0; fork_index < wallet_num_hard_forks; ++fork_index) + if (wallet_hard_forks[fork_index].version == hf_version) + break; + THROW_WALLET_EXCEPTION_IF(fork_index == wallet_num_hard_forks, error::wallet_internal_error, "Fork not found in table"); + uint64_t start_height = wallet_hard_forks[fork_index].height; + uint64_t end_height = fork_index == wallet_num_hard_forks - 1 ? std::numeric_limits::max() - : wallet_hard_forks[hf_version - 6].height; + : wallet_hard_forks[fork_index + 1].height; daemon_is_outdated = height < start_height || height >= end_height; }