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
This commit is contained in:
Crypto City 2023-03-19 07:35:06 +00:00 committed by wowario
parent a2dc960250
commit ed71a89138
No known key found for this signature in database
GPG Key ID: 24DCBE762DE9C111

View File

@ -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 const hardfork_t *wallet_hard_forks = nettype == TESTNET ? testnet_hard_forks
: nettype == STAGENET ? stagenet_hard_forks : mainnet_hard_forks; : nettype == STAGENET ? stagenet_hard_forks : mainnet_hard_forks;
wallet_is_outdated = static_cast<size_t>(hf_version) > wallet_num_hard_forks; wallet_is_outdated = hf_version > wallet_hard_forks[wallet_num_hard_forks-1].version;
if (wallet_is_outdated) if (wallet_is_outdated)
return; return;
// check block's height falls within wallet's expected range for block's given version // check block's height falls within wallet's expected range for block's given version
// Wownero version 7 starts from block 0 size_t fork_index;
uint64_t start_height = hf_version == 7 ? 0 : wallet_hard_forks[hf_version - 7].height; for (fork_index = 0; fork_index < wallet_num_hard_forks; ++fork_index)
uint64_t end_height = static_cast<size_t>(hf_version) + 1 > wallet_num_hard_forks 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<uint64_t>::max() ? std::numeric_limits<uint64_t>::max()
: wallet_hard_forks[hf_version - 6].height; : wallet_hard_forks[fork_index + 1].height;
daemon_is_outdated = height < start_height || height >= end_height; daemon_is_outdated = height < start_height || height >= end_height;
} }