From 0b39992a29ad5b5eabb954afa6e736e90d88e898 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Fri, 23 Aug 2024 07:41:22 +0300 Subject: [PATCH] [*] Autocollect segfault fix --- modules/consensus/esbocs/dap_chain_cs_esbocs.c | 7 ++++++- modules/type/blocks/dap_chain_cs_blocks.c | 15 ++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 860d925b45..ce4aae755c 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -339,7 +339,12 @@ static void s_check_db_collect_callback(dap_global_db_instance_t UNUSED_ARG *a_d dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(a_group, &l_objs_count); if (l_objs_count >= 10) { for (size_t i = 0; i < l_objs_count; i++) { - SUM_256_256(l_value_total, *(uint256_t*)l_objs[i].value, &l_value_total); + if (l_objs[i].value_len != sizeof(uint256_t)) { + log_it(L_ERROR, "Autocollect record %s is corrupt, len %zu clear it", l_objs[i].key, l_objs[i].value_len); + dap_global_db_del_sync(a_group, l_objs[i].key); + continue; + } + SUM_256_256(l_value_total, *(uint256_t *)l_objs[i].value, &l_value_total); if (compare256(l_value_total, l_block_collect_params->collecting_level) >= 0) { l_level_reached = true; break; diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 1caca8b140..13c5384906 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -1242,17 +1242,14 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) .block_sign_pkey = l_pub_key, .collecting_addr = l_addr }; - //Cleare gdb - size_t l_objs_fee_count = 0; - size_t l_objs_rew_count = 0; + //Clear gdb char *l_group_fee = dap_chain_cs_blocks_get_fee_group(l_net->pub.name); - char *l_group_rew = dap_chain_cs_blocks_get_reward_group(l_net->pub.name); - dap_global_db_obj_t *l_objs_fee = dap_global_db_get_all_sync(l_group_fee, &l_objs_fee_count); - dap_global_db_obj_t *l_objs_rew = dap_global_db_get_all_sync(l_group_rew, &l_objs_rew_count); - if(l_objs_fee_count)dap_global_db_objs_delete(l_objs_fee,l_objs_fee_count); - if(l_objs_rew_count)dap_global_db_objs_delete(l_objs_rew,l_objs_rew_count); + dap_global_db_del_sync(l_group_fee, NULL); DAP_DELETE(l_group_fee); - DAP_DELETE(l_group_rew); + char *l_group_reward = dap_chain_cs_blocks_get_reward_group(l_net->pub.name); + dap_global_db_del_sync(l_group_reward, NULL); + DAP_DELETE(l_group_reward); + json_object* json_arr_bl_out = json_object_new_array(); for (dap_chain_block_cache_t *l_block_cache = PVT(l_blocks)->blocks; l_block_cache; l_block_cache = l_block_cache->hh.next) { -- GitLab