|
|
|
@ -62,6 +62,9 @@ DISABLE_VS_WARNINGS(4355)
|
|
|
|
|
|
|
|
|
|
#define BAD_SEMANTICS_TXES_MAX_SIZE 100
|
|
|
|
|
|
|
|
|
|
// basically at least how many bytes the block itself serializes to without the miner tx
|
|
|
|
|
#define BLOCK_SIZE_SANITY_LEEWAY 100
|
|
|
|
|
|
|
|
|
|
namespace cryptonote
|
|
|
|
|
{
|
|
|
|
|
const command_line::arg_descriptor<bool, false> arg_testnet_on = {
|
|
|
|
@ -1417,18 +1420,21 @@ namespace cryptonote
|
|
|
|
|
{
|
|
|
|
|
TRY_ENTRY();
|
|
|
|
|
|
|
|
|
|
// load json & DNS checkpoints every 10min/hour respectively,
|
|
|
|
|
// and verify them with respect to what blocks we already have
|
|
|
|
|
CHECK_AND_ASSERT_MES(update_checkpoints(), false, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
|
|
|
|
|
|
|
|
|
|
bvc = boost::value_initialized<block_verification_context>();
|
|
|
|
|
if(block_blob.size() > get_max_block_size())
|
|
|
|
|
|
|
|
|
|
if (!check_incoming_block_size(block_blob))
|
|
|
|
|
{
|
|
|
|
|
LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected");
|
|
|
|
|
bvc.m_verifivation_failed = true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (((size_t)-1) <= 0xffffffff && block_blob.size() >= 0x3fffffff)
|
|
|
|
|
MWARNING("This block's size is " << block_blob.size() << ", closing on the 32 bit limit");
|
|
|
|
|
|
|
|
|
|
// load json & DNS checkpoints every 10min/hour respectively,
|
|
|
|
|
// and verify them with respect to what blocks we already have
|
|
|
|
|
CHECK_AND_ASSERT_MES(update_checkpoints(), false, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
|
|
|
|
|
|
|
|
|
|
block lb;
|
|
|
|
|
if (!b)
|
|
|
|
|
{
|
|
|
|
@ -1453,9 +1459,13 @@ namespace cryptonote
|
|
|
|
|
// block_blob
|
|
|
|
|
bool core::check_incoming_block_size(const blobdata& block_blob) const
|
|
|
|
|
{
|
|
|
|
|
if(block_blob.size() > get_max_block_size())
|
|
|
|
|
// note: we assume block weight is always >= block blob size, so we check incoming
|
|
|
|
|
// blob size against the block weight limit, which acts as a sanity check without
|
|
|
|
|
// having to parse/weigh first; in fact, since the block blob is the block header
|
|
|
|
|
// plus the tx hashes, the weight will typically be much larger than the blob size
|
|
|
|
|
if(block_blob.size() > m_blockchain_storage.get_current_cumulative_block_weight_limit() + BLOCK_SIZE_SANITY_LEEWAY)
|
|
|
|
|
{
|
|
|
|
|
LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected");
|
|
|
|
|
LOG_PRINT_L1("WRONG BLOCK BLOB, sanity check failed on size " << block_blob.size() << ", rejected");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|