diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c index ce7ccc6756b49b25102b5eee02ad593f4ab378ff..144b2a225f15b8ea761df71f2e79e46ca3fd632d 100644 --- a/modules/global-db/dap_chain_global_db.c +++ b/modules/global-db/dap_chain_global_db.c @@ -671,26 +671,20 @@ dap_global_db_obj_t* dap_chain_global_db_gr_load(const char *a_group, size_t *a_ *a_data_size_out = 0; return NULL; } - dap_global_db_obj_t *l_data = DAP_NEW_Z_SIZE(dap_global_db_obj_t, - (count + 1) * sizeof(dap_global_db_obj_t)); // last item in mass must be zero - // clear only last item - //memset(&l_data[count], 0, sizeof(dap_global_db_obj_t)); + dap_global_db_obj_t *l_data = DAP_NEW_Z_SIZE(dap_global_db_obj_t, (count + 1) * sizeof(dap_global_db_obj_t)); // last item in mass must be zero for(size_t i = 0; i < count; i++) { - dap_store_obj_t *l_store_obj_cur = l_store_obj + i; - /*assert(l_store_obj_cur); - l_data[i] = DAP_NEW(dap_global_db_obj_t); - l_data[i]->key = dap_strdup(l_store_obj_cur->key); - l_data[i]->value_len = l_store_obj_cur->value_len; - l_data[i]->value = DAP_NEW_Z_SIZE(uint8_t, l_store_obj_cur->value_len + 1); - memcpy(l_data[i]->value, l_store_obj_cur->value, l_store_obj_cur->value_len);*/ - //dap_global_db_obj_t *l_data = l_data0 + i; - l_data[i].key = l_store_obj_cur->key; - l_data[i].value_len = l_store_obj_cur->value_len; - l_data[i].value = l_store_obj_cur->value; - DAP_DELETE(l_store_obj_cur->group); + if (l_store_obj[i].value_len > 1024*1024) { + char l_temp[64] = { '\0' }; + log_it(L_ERROR, "Trash datum in gdb, key: %s, size: %d, created: %s", l_store_obj[i].key, l_store_obj[i].value_len, dap_ctime_r(&(l_store_obj[i].timestamp), l_temp)); + --count; + continue; + } + l_data[i].key = dap_strdup(l_store_obj[i].key); + l_data[i].value_len = l_store_obj[i].value_len; + l_data[i].value = DAP_NEW_Z_SIZE(uint8_t, l_store_obj[i].value_len + 1); + memcpy(l_data[i].value, l_store_obj[i].value, l_store_obj[i].value_len); } - // inner data are use in l_data0 - DAP_DELETE(l_store_obj); //dap_store_obj_free(l_store_obj, count); + dap_store_obj_free(l_store_obj, count); if(a_data_size_out) *a_data_size_out = count; return l_data; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 76e3b8361f2e6d53996826fabd55ff9e99921647..c1fd94f152e049956d45446ca7ebdf3144e4d467 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2052,19 +2052,20 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a dap_string_append_printf(a_str_tmp, "%s.%s: Not found records\n", a_net->pub.name, a_chain->name); for(size_t i = 0; i < l_objs_size; i++) { dap_chain_datum_t * l_datum = (dap_chain_datum_t*) l_objs[i].value; - char buf[50]; - char * l_key = dap_strdup(l_objs[i].key); time_t l_ts_create = (time_t) l_datum->header.ts_create; - + if (l_datum->header.data_size > l_objs[i].value_len) { + log_it(L_ERROR, "Trash datum in GDB %s.%s, key: %s", a_net->pub.name, a_chain->name, l_objs[i].key); + continue; + } + char buf[50]; dap_hash_fast_t l_data_hash; char l_data_hash_str[70]={[0]='\0'}; dap_hash_fast(l_datum->data,l_datum->header.data_size,&l_data_hash); dap_hash_fast_to_str(&l_data_hash,l_data_hash_str,sizeof (l_data_hash_str)-1); dap_string_append_printf(a_str_tmp, "hash %s: type_id=%s data_size=%u data_hash=%s ts_create=%s", // \n included in timestamp - l_key, c_datum_type_str[l_datum->header.type_id], + l_objs[i].key, c_datum_type_str[l_datum->header.type_id], l_datum->header.data_size, l_data_hash_str, dap_ctime_r(&l_ts_create, buf)); - DAP_DELETE(l_key); dap_chain_net_dump_datum(a_str_tmp, l_datum, a_hash_out_type); }