From 7b6c47bc4b39d202866cc1d9e328faaaf50e0a48 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Wed, 12 Jul 2023 12:44:00 +0300
Subject: [PATCH] [*] NULL DB mold with not blank hash segfault fix

---
 modules/consensus/esbocs/dap_chain_cs_esbocs.c | 4 +++-
 modules/net/srv/dap_chain_net_srv_order.c      | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 917b71dabd..a1df8c0551 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -314,6 +314,8 @@ static void s_session_db_serialize(dap_chain_esbocs_session_t *a_session)
     a_session->db_serial = l_pkt;
     if (l_pkt)
         dap_hash_fast(l_pkt->data, l_pkt->data_size, &a_session->db_hash);
+    else
+        a_session->db_hash = (dap_hash_fast_t){};
     if (PVT(a_session->esbocs)->debug) {
         char l_sync_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
         dap_chain_hash_fast_to_str(&a_session->db_hash, l_sync_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
@@ -1965,7 +1967,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
                                         " SYNC message is rejected cause DB hash mismatch",
                                            l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
                                                l_session->cur_round.sync_attempt);
-            if (!dap_hash_fast_is_blank(&l_session->db_hash)) {
+            if (l_session->db_serial) {
                 dap_chain_esbocs_validator_t *l_validator = DAP_NEW_Z(dap_chain_esbocs_validator_t);
                 l_validator->node_addr = *dap_chain_net_srv_stake_key_get_node_addr(&l_signing_addr);
                 l_validator->signing_addr = l_signing_addr;
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index 4528cd60c6..0f761ac149 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -72,7 +72,7 @@ static void s_srv_order_check_decree_sign_timer() {
     uint32_t l_unverified_orders_lifetime = dap_config_get_item_uint32_default(g_config, "srv", "unverified_orders_lifetime", 21600);
     dap_time_t l_time_cut_off = dap_time_now();
     l_time_cut_off -= l_unverified_orders_lifetime; // 6 Hours;
-    size_t l_net_count = 0;
+    uint16_t l_net_count = 0;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
     for (uint16_t i = 0; i < l_net_count; i++) {
         if (dap_chain_net_get_role(l_net_list[i]).enums == NODE_ROLE_MASTER) {
-- 
GitLab