From eec40837af57d515dee388bfee64c3f06abcbb0b Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Fri, 27 Nov 2020 22:02:24 +0700
Subject: [PATCH] [*] One another fixes pack

---
 CMakeLists.txt                                  |  2 +-
 dap-sdk/core/src/dap_list.c                     |  3 ++-
 dap-sdk/net/client/dap_client.c                 |  4 ++--
 dap-sdk/net/core/dap_events_socket.c            | 16 ++++++++--------
 dap-sdk/net/core/dap_net.c                      |  3 ++-
 dap-sdk/net/core/dap_proc_queue.c               | 10 +++++-----
 dap-sdk/net/core/dap_proc_thread.c              |  4 ++--
 dap-sdk/net/stream/session/dap_stream_session.c |  1 +
 modules/chain/dap_chain_ledger.c                |  2 +-
 modules/channel/chain/dap_stream_ch_chain.c     |  3 +++
 modules/global-db/dap_chain_global_db.c         |  2 +-
 11 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f0169dbf95..1773cbe222 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-63")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-64")
 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 a804610118..5942f399db 100755
--- a/dap-sdk/core/src/dap_list.c
+++ b/dap-sdk/core/src/dap_list.c
@@ -3,7 +3,6 @@
  */
 
 #include <stddef.h>
-
 #include "dap_common.h"
 #include "dap_strfuncs.h"
 #include "dap_list.h"
@@ -105,6 +104,8 @@ dap_list_t * dap_list_append(dap_list_t *list, void* data)
     dap_list_t *last;
 
     new_list = dap_list_alloc();
+    if( !new_list) // Out of memory
+        return list;
     new_list->data = data;
     new_list->next = NULL;
 
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index aa42b899ad..2aa777ee3a 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -317,7 +317,7 @@ void dap_client_go_stage(dap_client_t * a_client, dap_client_stage_t a_stage_tar
 
     assert(l_client_pvt);
 
-    struct go_stage_arg *l_stage_arg = DAP_NEW_Z(struct go_stage_arg);
+    struct go_stage_arg *l_stage_arg = DAP_NEW_Z(struct go_stage_arg); if (! l_stage_arg) return;
     l_stage_arg->stage_end_callback = a_stage_end_callback;
     l_stage_arg->stage_target = a_stage_target;
     l_stage_arg->client_pvt = l_client_pvt;
@@ -334,7 +334,7 @@ void dap_client_delete_mt(dap_client_t * a_client)
     dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client);
     assert(l_client_pvt);
 
-    struct go_stage_arg *l_stage_arg = DAP_NEW(struct go_stage_arg);
+    struct go_stage_arg *l_stage_arg = DAP_NEW(struct go_stage_arg); if (! l_stage_arg) return;
     l_stage_arg->stage_end_callback  = s_stage_done_delete ;
     l_stage_arg->stage_target = STAGE_BEGIN ;
     l_stage_arg->client_pvt = l_client_pvt;
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index d9e9d8022c..25122673d1 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -528,7 +528,7 @@ int dap_events_socket_queue_proc_input_unsafe(dap_events_socket_t * a_esocket)
  */
 dap_events_socket_t * s_create_type_event(dap_worker_t * a_w, dap_events_socket_callback_event_t a_callback)
 {
-    dap_events_socket_t * l_es = DAP_NEW_Z(dap_events_socket_t);
+    dap_events_socket_t * l_es = DAP_NEW_Z(dap_events_socket_t); if (!l_es) return NULL;
     l_es->type = DESCRIPTOR_TYPE_EVENT;
     if (a_w){
         l_es->events = a_w->events;
@@ -718,7 +718,7 @@ void *dap_events_socket_buf_thread(void *arg)
             dap_events_socket_queue_ptr_send(l_item->es, l_item->arg);
             break;
         }
-    //    l_count++;
+        l_count++;
     }
     if(l_res != 0)
         log_it(L_WARNING, "Lost data bulk in events socket buf thread");
@@ -729,7 +729,7 @@ void *dap_events_socket_buf_thread(void *arg)
 
 static void add_ptr_to_buf(dap_events_socket_t * a_es, void* a_arg)
 {
-    dap_events_socket_buf_item_t *l_item = DAP_NEW(dap_events_socket_buf_item_t);
+    dap_events_socket_buf_item_t *l_item = DAP_NEW(dap_events_socket_buf_item_t); if (!l_item) return;
     l_item->es = a_es;
     l_item->arg = a_arg;
     pthread_t l_thread;
@@ -848,7 +848,7 @@ dap_events_socket_t * dap_events_socket_wrap2( dap_server_t *a_server, struct da
   assert( a_server );
 
   //log_it( L_DEBUG,"Dap event socket wrapped around %d sock", a_sock );
-  dap_events_socket_t * ret = DAP_NEW_Z( dap_events_socket_t );
+  dap_events_socket_t * ret = DAP_NEW_Z( dap_events_socket_t ); if (!ret) return NULL;
 
   ret->socket = a_sock;
   ret->events = a_events;
@@ -1105,7 +1105,7 @@ void dap_events_socket_remove_and_delete_mt(dap_worker_t * a_w,  dap_events_sock
  */
 void dap_events_socket_set_readable_mt(dap_worker_t * a_w, dap_events_socket_t * a_es,bool a_is_ready)
 {
-    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t);
+    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t); if (! l_msg) return;
     l_msg->esocket = a_es;
     if (a_is_ready)
         l_msg->flags_set = DAP_SOCK_READY_TO_READ;
@@ -1126,7 +1126,7 @@ void dap_events_socket_set_readable_mt(dap_worker_t * a_w, dap_events_socket_t *
  */
 void dap_events_socket_set_writable_mt(dap_worker_t * a_w, dap_events_socket_t * a_es,bool a_is_ready)
 {
-    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t);
+    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t); if (!l_msg) return;
     l_msg->esocket = a_es;
     if (a_is_ready)
         l_msg->flags_set = DAP_SOCK_READY_TO_WRITE;
@@ -1150,7 +1150,7 @@ void dap_events_socket_set_writable_mt(dap_worker_t * a_w, dap_events_socket_t *
  */
 size_t dap_events_socket_write_inter(dap_events_socket_t * a_es_input, dap_events_socket_t *a_es, const void * a_data, size_t a_data_size)
 {
-    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t);
+    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t); if( !l_msg) return 0;
     l_msg->esocket = a_es;
     l_msg->data = DAP_NEW_SIZE(void,a_data_size);
     l_msg->data_size = a_data_size;
@@ -1212,7 +1212,7 @@ size_t dap_events_socket_write_f_inter(dap_events_socket_t * a_es_input, dap_eve
  */
 size_t dap_events_socket_write_mt(dap_worker_t * a_w,dap_events_socket_t *a_es, const void * data, size_t l_data_size)
 {
-    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t);
+    dap_worker_msg_io_t * l_msg = DAP_NEW_Z(dap_worker_msg_io_t); if (!l_msg) return 0;
     l_msg->esocket = a_es;
     l_msg->data = DAP_NEW_SIZE(void,l_data_size);
     l_msg->data_size = l_data_size;
diff --git a/dap-sdk/net/core/dap_net.c b/dap-sdk/net/core/dap_net.c
index 8d4d744c3d..b663dedd7e 100644
--- a/dap-sdk/net/core/dap_net.c
+++ b/dap-sdk/net/core/dap_net.c
@@ -45,6 +45,7 @@ int dap_net_resolve_host(const char *a_host, int ai_family, struct sockaddr *a_a
         }
         l_res = l_res->ai_next;
     }
-    freeaddrinfo(l_res);
+    if (l_res)
+        freeaddrinfo(l_res);
     return -1;
 }
diff --git a/dap-sdk/net/core/dap_proc_queue.c b/dap-sdk/net/core/dap_proc_queue.c
index ec98b6881c..f932bc6c14 100644
--- a/dap-sdk/net/core/dap_proc_queue.c
+++ b/dap-sdk/net/core/dap_proc_queue.c
@@ -42,7 +42,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg);
  */
 dap_proc_queue_t * dap_proc_queue_create(dap_proc_thread_t * a_thread)
 {
-    dap_proc_queue_t * l_queue = DAP_NEW_Z(dap_proc_queue_t);
+    dap_proc_queue_t * l_queue = DAP_NEW_Z(dap_proc_queue_t); if (!l_queue) return NULL;
     l_queue->proc_thread = a_thread;
     l_queue->esocket = dap_events_socket_create_type_queue_ptr_unsafe(NULL,s_queue_esocket_callback);
     l_queue->esocket->_inheritor = l_queue;
@@ -55,7 +55,7 @@ dap_proc_queue_t * dap_proc_queue_create(dap_proc_thread_t * a_thread)
  */
 void dap_proc_queue_delete(dap_proc_queue_t * a_queue)
 {
-    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t);
+    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t); if(!l_msg) return;
     l_msg->signal_kill = true;
     dap_events_socket_queue_ptr_send( a_queue->esocket, l_msg );
 }
@@ -72,7 +72,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg)
     assert(l_msg);
     // We have callback to add in list
     if (l_msg->callback){
-        dap_proc_queue_item_t * l_item = DAP_NEW_Z(dap_proc_queue_item_t);
+        dap_proc_queue_item_t * l_item = DAP_NEW_Z(dap_proc_queue_item_t); if (! l_item) return;
         l_item->callback = l_msg->callback;
         l_item->callback_arg = l_msg->callback_arg;
 
@@ -105,7 +105,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg)
  */
 void dap_proc_queue_add_callback(dap_worker_t * a_worker,dap_proc_queue_callback_t a_callback, void * a_callback_arg)
 {
-    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t);
+    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t); if (!l_msg) return;
     l_msg->callback = a_callback;
     l_msg->callback_arg = a_callback_arg;
     dap_events_socket_queue_ptr_send( a_worker->proc_queue->esocket , l_msg );
@@ -119,7 +119,7 @@ void dap_proc_queue_add_callback(dap_worker_t * a_worker,dap_proc_queue_callback
  */
 void dap_proc_queue_add_callback_inter( dap_events_socket_t * a_es_input, dap_proc_queue_callback_t a_callback, void * a_callback_arg)
 {
-    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t);
+    dap_proc_queue_msg_t * l_msg = DAP_NEW_Z(dap_proc_queue_msg_t); if (!l_msg) return;
     l_msg->callback = a_callback;
     l_msg->callback_arg = a_callback_arg;
     dap_events_socket_queue_ptr_send_to_input( a_es_input , l_msg );
diff --git a/dap-sdk/net/core/dap_proc_thread.c b/dap-sdk/net/core/dap_proc_thread.c
index 8c49e0f722..d675b3544e 100644
--- a/dap-sdk/net/core/dap_proc_thread.c
+++ b/dap-sdk/net/core/dap_proc_thread.c
@@ -406,7 +406,7 @@ static void * s_proc_thread_function(void * a_arg)
                 }
             }
             if (l_flag_write ){
-                int l_errno;
+                int l_errno=0;
                 if (l_cur->buf_out_size){
                     ssize_t l_bytes_sent = -1;
                     switch (l_cur->type) {
@@ -571,7 +571,7 @@ int dap_proc_thread_esocket_write_f_inter(dap_proc_thread_t * a_thread,dap_worke
     }
 
     dap_events_socket_t * l_es_io_input = a_thread->queue_io_input[a_worker->id];
-    char * l_data = DAP_NEW_SIZE(char,l_data_size+1);
+    char * l_data = DAP_NEW_SIZE(char,l_data_size+1); if (!l_data) return -1;
     l_data_size = dap_vsprintf(l_data,a_format,ap_copy);
     va_end(ap_copy);
 
diff --git a/dap-sdk/net/stream/session/dap_stream_session.c b/dap-sdk/net/stream/session/dap_stream_session.c
index 5c1cb1a29a..5bf946de7d 100644
--- a/dap-sdk/net/stream/session/dap_stream_session.c
+++ b/dap-sdk/net/stream/session/dap_stream_session.c
@@ -182,6 +182,7 @@ int dap_stream_session_close_mt(unsigned int id)
     dap_stream_session_t *l_s = dap_stream_session_id_unsafe( id );
     if(!l_s) {
         log_it(L_WARNING, "Session id %u not found", id);
+        dap_stream_session_unlock();
         return -1;
     }
 
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 48de72dd17..4d42cf471f 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -1337,7 +1337,7 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t
     bool emission_flag = !l_is_first_transaction || (l_is_first_transaction && l_ledger_priv->check_token_emission);
     // find 'out' items
     dap_list_t *l_list_out = dap_chain_datum_tx_items_get((dap_chain_datum_tx_t*) a_tx, TX_ITEM_TYPE_OUT_ALL, NULL);
-    uint64_t l_value;
+    uint64_t l_value=0;
     for (l_list_tmp = l_list_out; l_list_tmp; l_list_tmp = dap_list_next(l_list_tmp)) {
         dap_chain_tx_item_type_t l_type = *(uint8_t *)l_list_tmp->data;
         if (l_type == TX_ITEM_TYPE_OUT)
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index e6da3449bc..14f8cc211c 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -345,6 +345,9 @@ bool s_gdb_pkt_callback(dap_proc_thread_t *a_thread, void *a_arg)
     dap_list_t *l_pkt_copy_list = l_ch_chain->pkt_copy_list;
     if (l_pkt_copy_list) {
         l_ch_chain->pkt_copy_list = l_ch_chain->pkt_copy_list->next;
+        if (l_ch_chain->pkt_copy_list )
+            l_ch_chain->pkt_copy_list->prev = NULL;
+
         dap_chain_pkt_copy_t *l_pkt_copy = (dap_chain_pkt_copy_t *)l_pkt_copy_list->data;
         size_t l_data_obj_count = 0;
         // deserialize data & Parse data from dap_db_log_pack()
diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c
index 7ccaa5f4c3..ce7ccc6756 100644
--- a/modules/global-db/dap_chain_global_db.c
+++ b/modules/global-db/dap_chain_global_db.c
@@ -859,7 +859,7 @@ char* dap_chain_global_db_hash(const uint8_t *data, size_t data_size)
 void* dap_db_log_unpack(const void *a_data, size_t a_data_size, size_t *a_store_obj_count)
 {
     const dap_store_obj_pkt_t *l_pkt = (const dap_store_obj_pkt_t*) a_data;
-    if (! l_pkt)
+    if (! l_pkt || ! a_data_size)
         return NULL;
     if( (l_pkt->data_size+ sizeof(dap_store_obj_pkt_t)) != ((size_t) a_data_size ))
         return NULL;
-- 
GitLab