cryptonote_protocol: print peer versions when unexpected

also avoid integer underflow on zero height
This commit is contained in:
moneromooo-monero 2017-12-07 21:39:48 +00:00
parent 490a5d41ca
commit 25584f8639
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3

View File

@ -266,13 +266,17 @@ namespace cryptonote
return true;
// from v6, if the peer advertises a top block version, reject if it's not what it should be (will only work if no voting)
const uint8_t version = m_core.get_ideal_hard_fork_version(hshd.current_height - 1);
if (version >= 6 && version != hshd.top_version)
if (hshd.current_height > 0)
{
if (version < hshd.top_version)
MCLOG_RED(el::Level::Warning, "global", context << " peer claims higher version that we think - we may be forked from the network and a software upgrade may be needed");
LOG_DEBUG_CC(context, "Ignoring due to wrong top version for block " << (hshd.current_height - 1) << ": " << (unsigned)hshd.top_version << ", expected " << (unsigned)version);
return false;
const uint8_t version = m_core.get_ideal_hard_fork_version(hshd.current_height - 1);
if (version >= 6 && version != hshd.top_version)
{
if (version < hshd.top_version)
MCLOG_RED(el::Level::Warning, "global", context << " peer claims higher version that we think (" <<
(unsigned)hshd.top_version << " for " << (hshd.current_height - 1) << "instead of " << (unsigned)version <<
") - we may be forked from the network and a software upgrade may be needed");
return false;
}
}
context.m_remote_blockchain_height = hshd.current_height;