diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c index b4d8e0bff82d80cc473a037eccea210bb8dec6de..47fd9aec71e4b07cb53464382fb84441cd23efd1 100644 --- a/modules/chain/dap_chain_ch.c +++ b/modules/chain/dap_chain_ch.c @@ -345,8 +345,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } break; case DAP_CHAIN_CH_PKT_TYPE_CHAIN: { - if (!l_chain_pkt_data_size || l_chain_pkt_data_size > sizeof(dap_chain_ch_pkt_t) + DAP_CHAIN_ATOM_MAX_SIZE - * 5) { // For legacy block sizes + if (!l_chain_pkt_data_size || l_chain_pkt_data_size > sizeof(dap_chain_ch_pkt_t) + DAP_CHAIN_ATOM_MAX_SIZE) { log_it(L_WARNING, "Incorrect data size %zu in packet %s", l_chain_pkt_data_size, dap_chain_ch_pkt_type_to_str(l_ch_pkt->hdr.type)); dap_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id, diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index a5096b6d21f76733413db2eb78d86bbeee8f9862..8c81fb48076400c3e3e0b126070a749b6c3ebf2e 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -2236,7 +2236,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) dap_chain_esbocs_message_t *l_message = (dap_chain_esbocs_message_t *)l_ch_pkt->data; size_t l_message_size = l_ch_pkt->hdr.data_size; if (l_message_size < sizeof(dap_chain_esbocs_message_t) || - l_message_size > DAP_CHAIN_ATOM_MAX_SIZE + PKT_SIGN_N_HDR_OVERHEAD || + l_message_size > DAP_CHAIN_CANDIDATE_MAX_SIZE + PKT_SIGN_N_HDR_OVERHEAD || l_message_size != sizeof(*l_message) + l_message->hdr.sign_size + l_message->hdr.message_size) { log_it(L_WARNING, "Invalid message size %zu, drop this packet", l_message_size); return false; diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index cd610ee0fa654eebb95d03dd3e1fcd081b8aeaec..538969e9a518c9f42e0e7f996b6b5162e5b825c6 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -492,7 +492,7 @@ dap_chain_datum_t **s_service_state_datums_create(dap_chain_srv_hardfork_state_t { dap_chain_datum_t **ret = NULL; size_t l_datums_count = 0; - const uint64_t l_max_step_size = DAP_CHAIN_ATOM_MAX_SIZE - sizeof(dap_chain_datum_service_state_t); + const uint64_t l_max_step_size = DAP_CHAIN_CANDIDATE_MAX_SIZE - sizeof(dap_chain_datum_service_state_t); uint64_t l_step_size = dap_min(l_max_step_size, a_state->size); byte_t *l_offset = a_state->data, *l_ptr = l_offset, *l_end = a_state->data + a_state->size * a_state->count; while (l_offset < l_end) { diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 0f665559fe155d0be3ed5bb3e3a76a128b109cec..5be98b1c479a6cdab36f95930e7b6f2565ab6152 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -2636,8 +2636,8 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_ log_it(L_WARNING, "Empty datum"); /* How might it be? */ continue; } - if (l_blocks->block_new_size + l_datum_size > DAP_CHAIN_ATOM_MAX_SIZE) { - log_it(L_DEBUG, "Maximum size exeeded, %zu > %d", l_blocks->block_new_size + l_datum_size, DAP_CHAIN_ATOM_MAX_SIZE); + if (l_blocks->block_new_size + l_datum_size > DAP_CHAIN_CANDIDATE_MAX_SIZE) { + log_it(L_DEBUG, "Maximum size exeeded, %zu > %d", l_blocks->block_new_size + l_datum_size, DAP_CHAIN_CANDIDATE_MAX_SIZE); break; } if (!l_blocks->block_new) { diff --git a/modules/type/blocks/include/dap_chain_block.h b/modules/type/blocks/include/dap_chain_block.h index c21e531057a10b39334f2337f4cd5476d05d3fdb..755a6aaf4cdb5ef89830b216de492bb031462dce 100644 --- a/modules/type/blocks/include/dap_chain_block.h +++ b/modules/type/blocks/include/dap_chain_block.h @@ -24,12 +24,18 @@ #include "dap_common.h" #include "dap_time.h" #include "dap_hash.h" +#include "dap_chain.h" #include "dap_chain_common.h" #include "dap_chain_datum.h" #define DAP_CHAIN_BLOCK_SIGNATURE 0xDA05BF8E #define DAP_CHAIN_BLOCK_ID_SIZE 4 +#define DAP_CHAIN_CANDIDATE_SIGNS_MAX_SIZE (256 * 1024) +#if (DAP_CHAIN_CANDIDATE_SIGNS_MAX_SIZE >= DAP_CHAIN_ATOM_MAX_SIZE) +#error DAP_CHAIN_ATOM_MAX_SIZE should be greater than DAP_CHAIN_CANDIDATE_SIGNS_MAX_SIZE +#endif +#define DAP_CHAIN_CANDIDATE_MAX_SIZE (DAP_CHAIN_ATOM_MAX_SIZE - DAP_CHAIN_CANDIDATE_SIGNS_MAX_SIZE) typedef union dap_chain_block_typeid{ uint8_t data[DAP_CHAIN_BLOCK_ID_SIZE];