diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index 017e3d238717688379e60c587de666f07dd14b19..72febb8922a11d6f9c35cb0d2c067a5826af66f6 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -57,7 +57,7 @@ dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type, dap_chain_datum_token_tsd_t * l_tsd = DAP_NEW_Z_SIZE(dap_chain_datum_token_tsd_t, sizeof(dap_chain_datum_token_tsd_t) + a_data_size ); if ( l_tsd ){ - memcpy(l_tsd->data,&a_data , a_data_size ); + memcpy(l_tsd->data, a_data , a_data_size ); l_tsd->type = a_type; l_tsd->size = a_data_size; } @@ -74,23 +74,19 @@ dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type, dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size_t a_token_size) { // Check if token type could have tsd section - size_t l_hdr_size; + size_t l_hdr_size = sizeof(*a_token); size_t l_tsd_size; + + if (l_hdr_size > a_token_size){ + log_it(L_WARNING, "Token size smaller then header, corrupted data"); + return NULL; + } + switch( a_token->type){ case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: - l_hdr_size = sizeof (a_token->header_private_decl); - if (l_hdr_size> a_token_size){ - log_it(L_WARNING, "Token size smaller then header, corrupted data"); - return NULL; - } l_tsd_size = a_token->header_private_decl.tsd_total_size; break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE: - l_hdr_size = sizeof(a_token->header_private_update); - if (l_hdr_size> a_token_size){ - log_it(L_WARNING, "Token size smaller then header, corrupted data"); - return NULL; - } l_tsd_size = a_token->header_private_update.tsd_total_size; break; default: return NULL; @@ -128,6 +124,10 @@ dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token */ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags) { + if(!a_flags){ + dap_string_append_printf(a_str_out, "<NONE>\n"); + return; + } for ( uint16_t i = 0; (2^i) <=DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++ ){ if( a_flags & (2^i) ) dap_string_append_printf(a_str_out,"%s%s", c_dap_chain_datum_token_flag_str[2^i], diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index f347de9d1a40e2a85816ca6ab105bab9fcefb570..32e2f42eb5787b38fb40bb1ebb78bbbdd80ee4c5 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -242,7 +242,7 @@ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags #define dap_chain_datum_token_tsd_get_scalar(a,typeconv) *((typeconv*) a->data) // NULL-terminated string -#define dap_chain_datum_token_tsd_create_string(type,str) dap_chain_datum_token_tsd_create (type,str, dap_strlen(str)) +#define dap_chain_datum_token_tsd_create_string(type,str) dap_chain_datum_token_tsd_create (type,str, dap_strlen(str)+1) #define dap_chain_datum_token_tsd_get_string(a) ( ((char*) a->data )[a->size-1] == '\0'? (char*) a->data : "<CORRUPTED STRING>" ) #define dap_chain_datum_token_tsd_get_string_const(a) ( ((const char*) a->data )[a->size-1] == '\0'? (const char*) a->data : "<CORRUPTED STRING>" ) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 991580d3c771a2ec6a539dcd451f8918588f21b9..1513a12acc6be27e541c70dbba42ca760b2024b5 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1,4 +1,4 @@ -/* +/* * Authors: * Dmitriy A. Gerasimov <gerasimov.dmitriy@demlabs.net> * Alexander Lysikov <alexander.lysikov@demlabs.net> @@ -2145,11 +2145,11 @@ int com_mempool_proc(int argc, char ** argv, void *arg_func, char ** a_str_reply dap_string_append_printf(l_str_tmp, "Error! Datum doesn't pass verifications, examine node log files"); ret = -6; }else{ - dap_string_append_printf(l_str_tmp, "Datum processed well."); - if (dap_chain_global_db_gr_del( dap_strdup(l_datum_hash_str), l_gdb_group_mempool)){ + dap_string_append_printf(l_str_tmp, "Datum processed well. "); + if (!dap_chain_global_db_gr_del( dap_strdup(l_datum_hash_str), l_gdb_group_mempool)){ dap_string_append_printf(l_str_tmp, "Warning! Can't delete datum from mempool!"); }else - dap_string_append_printf(l_str_tmp, "Removed datum from mempool"); + dap_string_append_printf(l_str_tmp, "Removed datum from mempool."); } }else{ dap_string_append_printf(l_str_tmp, "Error! Can't move to no-concensus chains from mempool"); @@ -2707,6 +2707,10 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) log_it(L_DEBUG,"== TOTAL_SIGNS_VALID: %u", dap_chain_datum_token_tsd_get_scalar(l_tsd,uint16_t) ); break; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD: + log_it(L_DEBUG,"== DATUM_TYPE_ALLOWED_ADD: %s", + dap_chain_datum_token_tsd_get_string_const(l_tsd) ); + break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD: log_it(L_DEBUG,"== TX_SENDER_ALLOWED_ADD: %s", dap_chain_datum_token_tsd_get_string_const(l_tsd) ); @@ -2727,6 +2731,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) } size_t l_tsd_size = dap_chain_datum_token_tsd_size( l_tsd); memcpy(l_datum_token->data_n_tsd + l_datum_data_offset, l_tsd, l_tsd_size); + l_datum_token->header_private_decl.tsd_total_size += l_tsd_size; l_datum_data_offset += l_tsd_size; } @@ -2834,7 +2839,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) } dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_DECL, l_datum_token, - sizeof(l_datum_token->header_private) + l_datum_data_offset); + sizeof(*l_datum_token) + l_datum_data_offset); size_t l_datum_size = dap_chain_datum_size(l_datum); // Calc datum's hash