From bfd62cc4293b448feba73acd6976d973f3b4150a Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Thu, 26 Nov 2020 22:53:06 +0700
Subject: [PATCH] [*] Lot of small fixes

---
 CMakeLists.txt                                |  2 +-
 dap-sdk/core/src/dap_list.c                   |  1 -
 dap-sdk/core/src/rpmalloc/rpmalloc.c          |  3 +-
 .../core/src/unix/linux/dap_network_monitor.c |  2 +-
 dap-sdk/crypto/src/dap_enc_base58.c           |  1 +
 dap-sdk/crypto/src/dap_enc_bliss.c            |  2 +-
 dap-sdk/crypto/src/dap_enc_key.c              |  3 +-
 dap-sdk/crypto/src/dap_sign.c                 | 31 +++++++++++--------
 dap-sdk/net/client/dap_client.c               |  2 +-
 dap-sdk/net/client/dap_client_pvt.c           |  2 +-
 dap-sdk/net/core/dap_events_socket.c          |  5 +++
 modules/net/dap_chain_net.c                   | 20 +++++++-----
 12 files changed, 45 insertions(+), 29 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1eee15b42..d2eb321b21 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project(cellframe-sdk C)
 cmake_minimum_required(VERSION 2.8)
 
 set(CMAKE_C_STANDARD 11)
-set(CELLFRAME_SDK_NATIVE_VERSION "2.6-58")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-59")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 
 set(DAPSDK_MODULES "")
diff --git a/dap-sdk/core/src/dap_list.c b/dap-sdk/core/src/dap_list.c
index 43e404a4c3..d5d1cb033f 100755
--- a/dap-sdk/core/src/dap_list.c
+++ b/dap-sdk/core/src/dap_list.c
@@ -351,7 +351,6 @@ dap_list_t *dap_list_remove(dap_list_t *list, const void * data)
         {
             list = _dap_list_remove_link(list, tmp);
             dap_list_free1(tmp);
-
             break;
         }
     }
diff --git a/dap-sdk/core/src/rpmalloc/rpmalloc.c b/dap-sdk/core/src/rpmalloc/rpmalloc.c
index 8b1bbcdfa5..cab7ed149d 100644
--- a/dap-sdk/core/src/rpmalloc/rpmalloc.c
+++ b/dap-sdk/core/src/rpmalloc/rpmalloc.c
@@ -2230,7 +2230,8 @@ rpaligned_alloc(size_t alignment, size_t size) {
       ptr = (void*)(((uintptr_t)ptr & ~(uintptr_t)align_mask) + alignment);
     //Mark as having aligned blocks
     span_t* span = (span_t*)((uintptr_t)ptr & _memory_span_mask);
-    span->flags |= SPAN_FLAG_ALIGNED_BLOCKS;
+    if (span)
+        span->flags |= SPAN_FLAG_ALIGNED_BLOCKS;
     return ptr;
   }
 
diff --git a/dap-sdk/core/src/unix/linux/dap_network_monitor.c b/dap-sdk/core/src/unix/linux/dap_network_monitor.c
index 3341ad089f..27b2aa373e 100755
--- a/dap-sdk/core/src/unix/linux/dap_network_monitor.c
+++ b/dap-sdk/core/src/unix/linux/dap_network_monitor.c
@@ -189,7 +189,7 @@ static void _link_msg_handler(struct nlmsghdr *nlh,
 
 static void clear_results(dap_network_notification_t* cb_result)
 {
-    bzero(cb_result, sizeof (dap_network_notification_t));
+    memset(cb_result, 0,sizeof (dap_network_notification_t));
     cb_result->route.destination_address = (uint64_t) -1;
     cb_result->route.gateway_address = (uint64_t) -1;
 }
diff --git a/dap-sdk/crypto/src/dap_enc_base58.c b/dap-sdk/crypto/src/dap_enc_base58.c
index fba7d9a633..84282f26f9 100755
--- a/dap-sdk/crypto/src/dap_enc_base58.c
+++ b/dap-sdk/crypto/src/dap_enc_base58.c
@@ -98,6 +98,7 @@ size_t dap_enc_base58_decode(const char * a_in, void * a_out)
     }
 
     unsigned char l_out_u80[l_out_size_max];
+    memset(l_out_u80,0,l_out_size_max);
     unsigned char *l_out_u8 = l_out_u80;
     j = 0;
     switch (bytesleft) {
diff --git a/dap-sdk/crypto/src/dap_enc_bliss.c b/dap-sdk/crypto/src/dap_enc_bliss.c
index ce87eabdc2..e75d0f8d8d 100755
--- a/dap-sdk/crypto/src/dap_enc_bliss.c
+++ b/dap-sdk/crypto/src/dap_enc_bliss.c
@@ -199,7 +199,7 @@ bliss_signature_t* dap_enc_sig_bliss_read_signature(const uint8_t *a_buf, size_t
     l_sign->kind = kind;
     l_sign->z1 = DAP_NEW_SIZE(int32_t, p.n * sizeof(int32_t));
     l_sign->z2 = DAP_NEW_SIZE(int32_t, p.n * sizeof(int32_t));
-    l_sign->c = DAP_NEW_SIZE(uint32_t, p.kappa * sizeof(int32_t));
+    l_sign->c = DAP_NEW_SIZE(unsigned int, p.kappa * sizeof(unsigned int));
     size_t l_shift_mem = sizeof(size_t) + sizeof(bliss_kind_t);
     memcpy(l_sign->z1, a_buf + l_shift_mem, p.n * sizeof(int32_t));
     l_shift_mem += p.n * sizeof(int32_t);
diff --git a/dap-sdk/crypto/src/dap_enc_key.c b/dap-sdk/crypto/src/dap_enc_key.c
index 4c82fd3a69..a04f827079 100755
--- a/dap-sdk/crypto/src/dap_enc_key.c
+++ b/dap-sdk/crypto/src/dap_enc_key.c
@@ -709,7 +709,8 @@ dap_enc_key_t *dap_enc_key_new(dap_enc_key_type_t a_key_type)
             s_callbacks[a_key_type].new_callback(ret);
         }
     }
-    ret->type = a_key_type;
+    if(ret)
+        ret->type = a_key_type;
     return ret;
 }
 
diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index 4b390b5258..fd3c76f990 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -500,27 +500,32 @@ dap_multi_sign_t *dap_multi_sign_deserialize(dap_sign_type_enum_t a_type, uint8_
     l_mem_shift++;
     memcpy(&l_sign->sign_count, &a_sign[l_mem_shift], 1);
     l_mem_shift++;
-    l_sign->key_seq = DAP_NEW_Z_SIZE(dap_multi_sign_keys_t, l_sign->sign_count * sizeof(dap_multi_sign_keys_t));
+    if(l_sign->sign_count)
+        l_sign->key_seq = DAP_NEW_Z_SIZE(dap_multi_sign_keys_t, l_sign->sign_count * sizeof(dap_multi_sign_keys_t));
     for (int i = 0; i < l_sign->sign_count; i++) {
         memcpy(&l_sign->key_seq[i].num, &a_sign[l_mem_shift], 1);
         l_mem_shift++;
         memcpy(&l_sign->key_seq[i].type, &a_sign[l_mem_shift], sizeof(dap_sign_type_t));
         l_mem_shift += sizeof(dap_sign_type_t);
     }
-    l_sign->meta = DAP_NEW_Z_SIZE(dap_multi_sign_meta_t, l_sign->sign_count * sizeof(dap_multi_sign_meta_t));
     size_t l_pkeys_size = 0, l_signes_size = 0;
-    for (int i = 0; i < l_sign->sign_count; i++) {
-        memcpy(&l_sign->meta[i].pkey_size, &a_sign[l_mem_shift], sizeof(uint32_t));
-        l_mem_shift += sizeof(uint32_t);
-        l_pkeys_size += l_sign->meta[i].pkey_size;
-        memcpy(&l_sign->meta[i].sign_size, &a_sign[l_mem_shift], sizeof(uint32_t));
-        l_mem_shift += sizeof(uint32_t);
-        l_signes_size += l_sign->meta[i].sign_size;
+    if(l_sign->sign_count){
+        l_sign->meta = DAP_NEW_Z_SIZE(dap_multi_sign_meta_t, l_sign->sign_count * sizeof(dap_multi_sign_meta_t));
+        for (int i = 0; i < l_sign->sign_count; i++) {
+            memcpy(&l_sign->meta[i].pkey_size, &a_sign[l_mem_shift], sizeof(uint32_t));
+            l_mem_shift += sizeof(uint32_t);
+            l_pkeys_size += l_sign->meta[i].pkey_size;
+            memcpy(&l_sign->meta[i].sign_size, &a_sign[l_mem_shift], sizeof(uint32_t));
+            l_mem_shift += sizeof(uint32_t);
+            l_signes_size += l_sign->meta[i].sign_size;
+        }
     }
-    l_sign->key_hashes = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, l_sign->total_count * sizeof(dap_chain_hash_fast_t));
-    for (int i = 0; i < l_sign->total_count; i++) {
-        memcpy(&l_sign->key_hashes[i], &a_sign[l_mem_shift], sizeof(dap_chain_hash_fast_t));
-        l_mem_shift += sizeof(dap_chain_hash_fast_t);
+    if(l_sign->total_count){
+        l_sign->key_hashes = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, l_sign->total_count * sizeof(dap_chain_hash_fast_t));
+        for (int i = 0; i < l_sign->total_count; i++) {
+            memcpy(&l_sign->key_hashes[i], &a_sign[l_mem_shift], sizeof(dap_chain_hash_fast_t));
+            l_mem_shift += sizeof(dap_chain_hash_fast_t);
+        }
     }
     uint32_t l_data_shift = 0, l_data_size = 0;
     l_sign->pub_keys = DAP_NEW_Z_SIZE(uint8_t, l_pkeys_size);
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index f70f5132dc..aa42b899ad 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -294,7 +294,7 @@ static void s_go_stage_on_client_worker_unsafe(dap_worker_t * a_worker,void * a_
     }
     l_client_pvt->refs_count--;
     if ( l_client_pvt->is_to_delete )
-        dap_client_delete_unsafe(l_client_pvt->client);
+        dap_client_delete_unsafe(l_client);
 
 }
 /**
diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index 8cad69894e..48fb9ad870 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -779,7 +779,7 @@ static void s_request_response(void * a_response, size_t a_response_size, void *
 static void s_enc_init_response(dap_client_t * a_client, void * a_response, size_t a_response_size)
 {
     dap_client_pvt_t * l_client_pvt = a_client ? DAP_CLIENT_PVT(a_client) : NULL;
-    if (!dap_client_pvt_check(l_client_pvt) ){
+    if (! l_client_pvt ||  !dap_client_pvt_check(l_client_pvt) ){
         // Response received after client_pvt was deleted
         return;
     }
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index 3e40b1524b..d9e9d8022c 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -361,6 +361,10 @@ dap_events_socket_t * dap_events_socket_queue_ptr_create_input(dap_events_socket
 dap_events_socket_t * s_create_type_queue_ptr(dap_worker_t * a_w, dap_events_socket_callback_queue_ptr_t a_callback)
 {
     dap_events_socket_t * l_es = DAP_NEW_Z(dap_events_socket_t);
+    if(!l_es){
+        log_it(L_ERROR,"Can't allocate esocket!");
+        return NULL;
+    }
     l_es->type = DESCRIPTOR_TYPE_QUEUE;
     l_es->flags =  DAP_SOCK_QUEUE_PTR;
     if (a_w){
@@ -429,6 +433,7 @@ dap_events_socket_t * s_create_type_queue_ptr(dap_worker_t * a_w, dap_events_soc
         DAP_DELETE(l_es);
         l_es = NULL;
         log_it(L_CRITICAL,"Can't create mqueue descriptor %s: \"%s\" code %d",l_mq_name, l_errbuf, l_errno);
+        return NULL;
     }else{
         l_es->mqd_id = l_mq_last_number;
         l_mq_last_number++;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 96c92cc0cb..558b7216f6 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1799,13 +1799,16 @@ void dap_chain_net_deinit()
 dap_chain_net_t **dap_chain_net_list(uint16_t *a_size)
 {
     *a_size = HASH_COUNT(s_net_items);
-    dap_chain_net_t **l_net_list = DAP_NEW_SIZE(dap_chain_net_t *, (*a_size) * sizeof(dap_chain_net_t *));
-    dap_chain_net_item_t *l_current_item, *l_tmp;
-    int i = 0;
-    HASH_ITER(hh, s_net_items, l_current_item, l_tmp) {
-        l_net_list[i++] = l_current_item->chain_net;
-    }
-    return l_net_list;
+    if(*a_size){
+        dap_chain_net_t **l_net_list = DAP_NEW_SIZE(dap_chain_net_t *, (*a_size) * sizeof(dap_chain_net_t *));
+        dap_chain_net_item_t *l_current_item, *l_tmp;
+        int i = 0;
+        HASH_ITER(hh, s_net_items, l_current_item, l_tmp) {
+            l_net_list[i++] = l_current_item->chain_net;
+        }
+        return l_net_list;
+    }else
+        return NULL;
 }
 
 /**
@@ -2609,11 +2612,12 @@ static uint8_t *dap_chain_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash)
 {
     uint16_t l_net_count;
     dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count);
-    if (l_net_count) {
+    if (l_net_count && l_net_list) {
         uint8_t *l_ret = DAP_NEW_SIZE(uint8_t, l_net_count);
         for (uint16_t i = 0; i < l_net_count; i++) {
             l_ret[i] = s_net_check_acl(l_net_list[i], a_pkey_hash);
         }
+        DAP_DELETE(l_net_list);
         return l_ret;
     }
     return NULL;
-- 
GitLab