Add size check on meta.key_origin.path

Resolves segfault on legacy wallet

Log warning when meta.key_origin.path is below expected size
pull/23304/head
Rob Fielding 3 years ago committed by Andrew Chow
parent 577bd51a4b
commit 0652ee73ec

@ -382,6 +382,12 @@ std::vector<WalletDestination> LegacyScriptPubKeyMan::MarkUnusedAddresses(const
if (it != mapKeyMetadata.end()){ if (it != mapKeyMetadata.end()){
CKeyMetadata meta = it->second; CKeyMetadata meta = it->second;
if (!meta.hd_seed_id.IsNull() && meta.hd_seed_id != m_hd_chain.seed_id) { if (!meta.hd_seed_id.IsNull() && meta.hd_seed_id != m_hd_chain.seed_id) {
if (meta.key_origin.path.size() < 3) {
WalletLogPrintf("%s: Adding inactive seed keys failed, insufficient path size: %d, has_key_origin: %s\n",
__func__,
meta.key_origin.path.size(),
meta.has_key_origin);
} else {
bool internal = (meta.key_origin.path[1] & ~BIP32_HARDENED_KEY_LIMIT) != 0; bool internal = (meta.key_origin.path[1] & ~BIP32_HARDENED_KEY_LIMIT) != 0;
int64_t index = meta.key_origin.path[2] & ~BIP32_HARDENED_KEY_LIMIT; int64_t index = meta.key_origin.path[2] & ~BIP32_HARDENED_KEY_LIMIT;
@ -391,6 +397,7 @@ std::vector<WalletDestination> LegacyScriptPubKeyMan::MarkUnusedAddresses(const
} }
} }
} }
}
return result; return result;
} }

Loading…
Cancel
Save