diff --git a/dap-sdk/core/src/dap_binary_tree.c b/dap-sdk/core/src/dap_binary_tree.c
index d8830d93f84809d51bc00f3914fedf309da68184..f52b58226dccb7771b64494d7b3aea5c9ffb8ed6 100644
--- a/dap-sdk/core/src/dap_binary_tree.c
+++ b/dap-sdk/core/src/dap_binary_tree.c
@@ -138,15 +138,15 @@ static dap_binary_tree_t *s_tree_delete(dap_binary_tree_t *a_elm, dap_binary_tre
         a_elm->data = l_tmp->data;
         a_elm->right = s_tree_delete(a_elm->right, a_elm->key);
     } else if (a_elm->left) {
-        dap_binary_tree_t * l_elm_old = a_elm;
+        dap_binary_tree_t * l_elm_old_left = a_elm->left;
         DAP_DELETE(a_elm->data);
         DAP_DELETE(a_elm);
-        a_elm = l_elm_old->left;
+        a_elm = l_elm_old_left;
     } else if (a_elm->right) {
-        dap_binary_tree_t * l_elm_old = a_elm;
+        dap_binary_tree_t * l_elm_old_right = a_elm->right;
         DAP_DELETE(a_elm->data);
         DAP_DELETE(a_elm);
-        a_elm = l_elm_old->right;
+        a_elm = l_elm_old_right;
     } else {
         DAP_DELETE(a_elm->data);
         DAP_DELETE(a_elm);
diff --git a/dap-sdk/core/src/darwin/macos/dap_network_monitor.c b/dap-sdk/core/src/darwin/macos/dap_network_monitor.c
index f66c7156c476b4365d01f1ae515c392cad71edfe..9f427fe692017bfc9e969da71524fe9e1106d5cf 100755
--- a/dap-sdk/core/src/darwin/macos/dap_network_monitor.c
+++ b/dap-sdk/core/src/darwin/macos/dap_network_monitor.c
@@ -313,9 +313,15 @@ static OSStatus CopyIPAddressListSCF(CFArrayRef *addrList)
     }
     // Clean up.
 
-    CFQRelease(ref);
-    CFQRelease(pattern);
-    CFQRelease(patternList);
+    if(valueDict)
+        CFQRelease(valueDict);
+    if(ref)
+        CFQRelease(ref);
+    if(pattern)
+        CFQRelease(pattern);
+    if(patternList)
+        CFQRelease(patternList);
+
     if (err != noErr && result != NULL) {
         CFQRelease(result);
         result = NULL;
diff --git a/dap-sdk/crypto/include/dap_hash.h b/dap-sdk/crypto/include/dap_hash.h
index 8c6c1aff9b26859270b2d411a6cd0a484fddb552..e28f98ec4b724cd506c490e21ee93537b6f01ffb 100755
--- a/dap-sdk/crypto/include/dap_hash.h
+++ b/dap-sdk/crypto/include/dap_hash.h
@@ -100,7 +100,12 @@ static inline bool dap_hash_fast_is_blank( dap_hash_fast_t *a_hash )
 
 DAP_STATIC_INLINE int dap_chain_hash_fast_to_str( dap_hash_fast_t *a_hash, char *a_str, size_t a_str_max )
 {
-    assert(a_str_max >= (DAP_CHAIN_HASH_FAST_SIZE * 2 + 2));
+    if(!a_str )
+        return -1;
+    if(! a_str )
+        return -2;
+    if( a_str_max < (DAP_CHAIN_HASH_FAST_SIZE * 2 + 2) )
+        return -3;
     a_str[0] = '0';
     a_str[1] = 'x';
     a_str[ DAP_CHAIN_HASH_FAST_SIZE * 2 + 2] = 0;
@@ -116,7 +121,8 @@ DAP_STATIC_INLINE char *dap_chain_hash_fast_to_str_new(dap_hash_fast_t * a_hash)
 {
     const size_t c_hash_str_size = sizeof(*a_hash)*2 +1 /*trailing zero*/ +2 /* heading 0x */+4/*just to be sure*/ ;
     char * ret = DAP_NEW_Z_SIZE(char, c_hash_str_size);
-    dap_chain_hash_fast_to_str( a_hash, ret, c_hash_str_size );
+    if(dap_chain_hash_fast_to_str( a_hash, ret, c_hash_str_size ) < 0 )
+        DAP_DEL_Z(ret);
     return ret;
 }
 
diff --git a/dap-sdk/crypto/src/dap_cert_file.c b/dap-sdk/crypto/src/dap_cert_file.c
index 55fb7f6fe35432b3599e0fe08f0d84f0401c3fd9..7e292ddbeae75e33697cbe6d71654934f135a1c1 100755
--- a/dap-sdk/crypto/src/dap_cert_file.c
+++ b/dap-sdk/crypto/src/dap_cert_file.c
@@ -138,14 +138,16 @@ void dap_cert_deserialize_meta(dap_cert_t *a_cert, const uint8_t *a_data, size_t
         }
         l_meta_arr[l_meta_items_count++] = l_new_meta;
     }
-    size_t l_reorder_arr[l_meta_items_count];
-    dap_cert_file_aux_t l_reorder = {l_reorder_arr, 0};
-    s_balance_the_tree(&l_reorder, 0, l_meta_items_count - 1);
-    size_t n = l_reorder_arr[0];
-    a_cert->metadata = dap_binary_tree_insert(NULL, l_meta_arr[n]->key, (void *)l_meta_arr[n]);
-    for (size_t i = 1; i < l_meta_items_count; i++) {
-        n = l_reorder_arr[i];
-        dap_binary_tree_insert(a_cert->metadata, l_meta_arr[n]->key, (void *)l_meta_arr[n]);
+    if(l_meta_items_count){
+        size_t l_reorder_arr[l_meta_items_count];
+        dap_cert_file_aux_t l_reorder = {l_reorder_arr, 0};
+        s_balance_the_tree(&l_reorder, 0, l_meta_items_count - 1);
+        size_t n = l_reorder_arr[0];
+        a_cert->metadata = dap_binary_tree_insert(NULL, l_meta_arr[n]->key, (void *)l_meta_arr[n]);
+        for (size_t i = 1; i < l_meta_items_count; i++) {
+            n = l_reorder_arr[i];
+            dap_binary_tree_insert(a_cert->metadata, l_meta_arr[n]->key, (void *)l_meta_arr[n]);
+        }
     }
     DAP_DELETE(l_meta_arr);
 }
@@ -277,7 +279,7 @@ uint8_t* dap_cert_mem_save(dap_cert_t * a_cert, uint32_t *a_cert_size_out)
     memcpy(l_data +l_data_offset, l_pub_key_data ,l_pub_key_data_size );
     l_data_offset += l_pub_key_data_size;
 
-    if ( l_priv_key_data_size ) {
+    if ( l_priv_key_data_size && l_priv_key_data ) {
         memcpy(l_data +l_data_offset, l_priv_key_data ,l_priv_key_data_size );
         l_data_offset += l_priv_key_data_size;
     }
diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c
index ab970ed1047c5c5f5017dc4c0f9c5294f677ceca..23333f536f7f78be6bcae8151985c80a8322a7f7 100755
--- a/dap-sdk/crypto/src/dap_enc_dilithium.c
+++ b/dap-sdk/crypto/src/dap_enc_dilithium.c
@@ -179,22 +179,26 @@ dilithium_signature_t* dap_enc_dilithium_read_signature(uint8_t *a_buf, size_t a
 
     if( l_sign->sig_len> (UINT64_MAX - l_shift_mem ) ){
             log_it(L_ERROR,"::read_signature() Buflen inside signature %"DAP_UINT64_FORMAT_u" is too big ", l_sign->sig_len);
+            DAP_DELETE(l_sign);
             return NULL;
     }
 
     // Dirty hack for old 32 bit version serializations
     if( l_sign->sig_len + l_shift_mem + 8 == (uint64_t) a_buflen  ){
+            DAP_DELETE(l_sign);
             return dap_enc_dilithium_read_signature_old(a_buf,a_buflen);
     }
 
     // Dirty hack for old 32 bit version serializations
     if( l_sign->sig_len + l_shift_mem + 4 == (uint64_t) a_buflen  ){
+            DAP_DELETE(l_sign);
             return dap_enc_dilithium_read_signature_old2(a_buf,a_buflen);
     }
 
     if( (uint64_t) a_buflen < (l_shift_mem + l_sign->sig_len) ){
         log_it(L_ERROR,"::read_signature() Buflen %zd is smaller than all fields together(%"DAP_UINT64_FORMAT_u")", a_buflen,
                l_shift_mem + l_sign->sig_len  );
+        DAP_DELETE(l_sign);
         return NULL;
     }
 
diff --git a/dap-sdk/crypto/src/dap_enc_oaes.c b/dap-sdk/crypto/src/dap_enc_oaes.c
index ccfa529b91985bb3b302ec7f57cda902bf9abb70..c7e8e3a57a9fc55785f4d6f48d3fb558e4141622 100755
--- a/dap-sdk/crypto/src/dap_enc_oaes.c
+++ b/dap-sdk/crypto/src/dap_enc_oaes.c
@@ -47,7 +47,10 @@ void dap_enc_oaes_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
     a_key->last_used_timestamp = time(NULL);
 
     oaes_ctx *ctx = get_oaes_ctx(a_key);
-
+    if(ctx == NULL){
+        log_it(L_ERROR,"OAES ctx can't be NULL");
+        return;
+    }
     if(kex_size < key_size) {
         log_it(L_ERROR, "kex_size can't be less than key_size");
         return;
diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index 0dc4d61feae5c188df8262e0a3a4137ac800d010..3700b9c3f001620e22054a9a2a95a04782bba0b8 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -541,20 +541,24 @@ dap_multi_sign_t *dap_multi_sign_deserialize(dap_sign_type_enum_t a_type, uint8_
         }
     }
     uint32_t l_data_shift = 0, l_data_size = 0;
-    l_sign->pub_keys = DAP_NEW_Z_SIZE(uint8_t, l_pkeys_size);
-    for (int i = 0; i < l_sign->sign_count; i++) {
-        l_data_size = l_sign->meta[i].pkey_size;
-        memcpy( &l_sign->pub_keys[l_data_shift], &a_sign[l_mem_shift],l_data_size);
-        l_mem_shift += l_data_size;
-        l_data_shift += l_data_size;
+    if(l_pkeys_size){
+        l_sign->pub_keys = DAP_NEW_Z_SIZE(uint8_t, l_pkeys_size);
+        for (int i = 0; i < l_sign->sign_count; i++) {
+            l_data_size = l_sign->meta[i].pkey_size;
+            memcpy( &l_sign->pub_keys[l_data_shift], &a_sign[l_mem_shift],l_data_size);
+            l_mem_shift += l_data_size;
+            l_data_shift += l_data_size;
+        }
+        l_data_shift = l_data_size = 0;
     }
-    l_data_shift = l_data_size = 0;
-    l_sign->sign_data = DAP_NEW_Z_SIZE(uint8_t, l_signes_size);
-    for (int i = 0; i < l_sign->sign_count; i++) {
-        l_data_size = l_sign->meta[i].sign_size;
-        memcpy(&l_sign->sign_data[l_data_shift], &a_sign[l_mem_shift], l_data_size);
-        l_mem_shift += l_data_size;
-        l_data_shift += l_data_size;
+    if(l_signes_size){
+        l_sign->sign_data = DAP_NEW_Z_SIZE(uint8_t, l_signes_size);
+        for (int i = 0; i < l_sign->sign_count; i++) {
+            l_data_size = l_sign->meta[i].sign_size;
+            memcpy(&l_sign->sign_data[l_data_shift], &a_sign[l_mem_shift], l_data_size);
+            l_mem_shift += l_data_size;
+            l_data_shift += l_data_size;
+        }
     }
     return l_sign;
 }
@@ -782,6 +786,7 @@ int dap_multi_sign_verify(dap_multi_sign_t *a_sign, const void *a_data, const si
         }
         if (!l_hashed) {
             log_it (L_ERROR, "Can't create multi-signature hash");
+            DAP_DELETE(l_step_sign);
             return -1;
         }
         l_verified = dap_sign_verify(l_step_sign, &l_data_hash, sizeof(dap_chain_hash_fast_t));
diff --git a/dap-sdk/crypto/src/oaes/oaes_lib.c b/dap-sdk/crypto/src/oaes/oaes_lib.c
index 5020d247136567deb807934f5766d6c05f9e9b1d..96d06863eec204916e3f47f5aa1914a1c29f80a8 100755
--- a/dap-sdk/crypto/src/oaes/oaes_lib.c
+++ b/dap-sdk/crypto/src/oaes/oaes_lib.c
@@ -615,7 +615,9 @@ static OAES_RET oaes_key_gen( OAES_CTX * ctx, size_t key_size )
 		return OAES_RET_ARG1;
 	
 	oaes_key_destroy( &(_ctx->key_flat) );
-	
+    if(_key == NULL)
+        return OAES_RET_ARG1;
+
 	_key->data_len = key_size;
 	
 	for( _i = 0; _i < key_size; _i++ )
diff --git a/dap-sdk/crypto/src/ringct20/ring.c b/dap-sdk/crypto/src/ringct20/ring.c
index e85b12ebecfad7d9770ee71d415a988a1035cef9..e9c8368dca96ce646aba87dfa7596ac0d0c0b3ba 100644
--- a/dap-sdk/crypto/src/ringct20/ring.c
+++ b/dap-sdk/crypto/src/ringct20/ring.c
@@ -630,8 +630,9 @@ int MIMO_LRCT_SigVer(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hLi
 		poly_frombytes(&ctmp, bpoly);
 		poly_serial(&ctmp);//
 	}
-	if (poly_equal(&ctmp, c1) == 1)
-	{
+    DAP_DELETE(H2q);
+    DAP_DELETE(A2qp);
+    if (poly_equal(&ctmp, c1) == 1){
 		return 1;
 	}
 	return 0;	
diff --git a/dap-sdk/crypto/src/sig_dilithium/dilithium_sign.c b/dap-sdk/crypto/src/sig_dilithium/dilithium_sign.c
index fbc106caca8d6eeae954241ce31f0be0d59e1cc4..cd98896c8fad89bb00096bbb1302d0a1106cf6b0 100755
--- a/dap-sdk/crypto/src/sig_dilithium/dilithium_sign.c
+++ b/dap-sdk/crypto/src/sig_dilithium/dilithium_sign.c
@@ -109,7 +109,7 @@ static int32_t dilithium_private_and_public_keys_init(dilithium_private_key_t *p
 
     unsigned char *f = NULL, *g = NULL;
 
-    f = calloc(p->CRYPTO_PUBLICKEYBYTES, sizeof(char));
+    f = calloc(p->CRYPTO_PUBLICKEYBYTES, sizeof(unsigned char));
     if (f == NULL) {
         free(f);
         free(g);
@@ -118,7 +118,7 @@ static int32_t dilithium_private_and_public_keys_init(dilithium_private_key_t *p
     public_key->kind = p->kind;
     public_key->data = f;
 
-    g = calloc(p->CRYPTO_SECRETKEYBYTES, sizeof(char));
+    g = calloc(p->CRYPTO_SECRETKEYBYTES, sizeof(unsigned char));
     if (g == NULL) {
         free(f);
         free(g);
diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c
index 12f49aeb688cac73afc5acd85f64076aace859d4..2d67da94eb9f71a6e85e60ccb96974fc11ab19b3 100644
--- a/dap-sdk/net/client/dap_client_pvt.c
+++ b/dap-sdk/net/client/dap_client_pvt.c
@@ -951,11 +951,13 @@ static void s_enc_init_response(dap_client_t * a_client, void * a_response, size
                 if(json_object_get_type(val) == json_type_string) {
                     char *str = (char *) json_object_get_string(val);
                     if(!strcmp(key, "encrypt_id")) {
+                        DAP_DELETE (l_session_id_b64);
                         l_session_id_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1);
                         strcpy(l_session_id_b64, str);
                         json_parse_count++;
                     }
                     if(!strcmp(key, "encrypt_msg")) {
+                        DAP_DELETE(l_bob_message_b64);
                         l_bob_message_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1);
                         strcpy(l_bob_message_b64, str);
                         json_parse_count++;
@@ -1017,6 +1019,7 @@ static void s_enc_init_response(dap_client_t * a_client, void * a_response, size
             l_client_pvt->stage_status = STAGE_STATUS_ERROR;
             s_stage_status_after(l_client_pvt);
         }
+
         DAP_DELETE(l_session_id_b64);
         DAP_DELETE(l_bob_message_b64);
     } else if(a_response_size > 1) {
diff --git a/dap-sdk/net/core/dap_events.c b/dap-sdk/net/core/dap_events.c
index ac6ce8d2ef65a698df35a3681d57aaebcf831b1f..d0c057becf510463ad2e015e2396b25680baaa40 100644
--- a/dap-sdk/net/core/dap_events.c
+++ b/dap-sdk/net/core/dap_events.c
@@ -173,10 +173,11 @@ void dap_cpu_assign_thread_on(uint32_t a_cpu_id)
             case EFAULT: strncpy(l_errbuf,"A supplied memory address was invalid.",sizeof (l_errbuf)-1); break;
             case EINVAL: strncpy(l_errbuf,"The affinity bit mask mask contains no processors that are currently physically on the system and permitted to the thread",sizeof (l_errbuf)-1); break;
             case ESRCH:  strncpy(l_errbuf,"No thread with the ID thread could be found",sizeof (l_errbuf)-1); break;
+            case EPFNOSUPPORT: strncpy(l_errbuf,"System doesn't support thread affinity set",sizeof (l_errbuf)-1); break;
             default:     strncpy(l_errbuf,"Unknown error",sizeof (l_errbuf)-1);
         }
-        log_it(L_CRITICAL, "Worker #%u: error pthread_setaffinity_np(): %s (%d)", l_errbuf , l_retcode);
-        abort();
+        log_it(L_ERROR, "Worker #%u: error in set affinity thread call: %s (%d)",a_cpu_id, l_errbuf , l_retcode);
+        //abort();
     }
 #endif
 #else
diff --git a/dap-sdk/net/core/dap_proc_thread.c b/dap-sdk/net/core/dap_proc_thread.c
index da7b629cdd0f61f9f9d60f5c8a609ec9bbd0402f..c1014bab5c188eb8e80c2e5f1fa6a2bd5159a714 100644
--- a/dap-sdk/net/core/dap_proc_thread.c
+++ b/dap-sdk/net/core/dap_proc_thread.c
@@ -806,7 +806,7 @@ static void * s_proc_thread_function(void * a_arg)
                                     else{
                                         l_errno = errno;
                                         log_it(L_WARNING,"queue ptr send error: kevent %p errno: %d", l_es_w_data->ptr, l_errno);
-                                        DAP_DELETE(l_es_w_data->ptr);
+                                        DAP_DELETE(l_es_w_data);
                                     }
                                 #else
                                     #error "Not implemented dap_events_socket_queue_ptr_send() for this platform"
@@ -992,7 +992,11 @@ 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); if (!l_data) return -1;
+    char * l_data = DAP_NEW_SIZE(char,l_data_size+1);
+    if (!l_data){
+        va_end(ap_copy);
+        return -1;
+    }
     l_data_size = dap_vsprintf(l_data,a_format,ap_copy);
     va_end(ap_copy);
 
diff --git a/dap-sdk/net/server/http_server/dap_http_simple.c b/dap-sdk/net/server/http_server/dap_http_simple.c
index 93390604c488cc6998f43de7b5bae85d97c62469..2ced45409ca2b9470e9c65d0843cd58df4ef562d 100644
--- a/dap-sdk/net/server/http_server/dap_http_simple.c
+++ b/dap-sdk/net/server/http_server/dap_http_simple.c
@@ -196,6 +196,7 @@ bool dap_http_simple_set_supported_user_agents( const char *user_agents, ... )
 
     if ( user_agent == NULL ) {
       log_it(L_ERROR, "Can't parse user agent string");
+      va_end(argptr);
        _free_user_agents_list();
        return NULL;
     }
diff --git a/dap-sdk/net/server/json_rpc/src/dap_json_rpc_params.c b/dap-sdk/net/server/json_rpc/src/dap_json_rpc_params.c
index 07d3835e8eb5269cebd9485dc6b7c1e1c4f831f8..fd3c2653a41c6a1552da2ba0221e3f5049560968 100644
--- a/dap-sdk/net/server/json_rpc/src/dap_json_rpc_params.c
+++ b/dap-sdk/net/server/json_rpc/src/dap_json_rpc_params.c
@@ -5,7 +5,8 @@
 dap_json_rpc_params_t* dap_json_rpc_params_create(void)
 {
     dap_json_rpc_params_t *l_params = DAP_NEW(dap_json_rpc_params_t);
-    l_params->lenght = 0;
+    if(l_params)
+        l_params->lenght = 0;
     return l_params;
 }
 
@@ -47,7 +48,8 @@ void dap_json_rpc_params_add_param(dap_json_rpc_params_t *a_params, dap_json_rpc
 {
     uint32_t l_len_new_params = a_params->lenght + 1;
     dap_json_rpc_param_t **l_new_params = DAP_NEW_SIZE(dap_json_rpc_param_t*, l_len_new_params);
-    memcpy(l_new_params, a_params->params, sizeof(dap_json_rpc_param_t*) * a_params->lenght);
+    if(a_params->lenght && a_params->params)
+       memcpy(l_new_params, a_params->params, sizeof(dap_json_rpc_param_t*) * a_params->lenght);
     memcpy(l_new_params+a_params->lenght, &a_param, sizeof(dap_json_rpc_param_t*));
     if (a_params->lenght != 0)
         DAP_FREE(a_params->params);
diff --git a/dap-sdk/net/server/json_rpc/src/dap_json_rpc_request.c b/dap-sdk/net/server/json_rpc/src/dap_json_rpc_request.c
index 1d0028ae42fe56f61c6fb518e3cf5d8d5ef02063..c51d43241386be8e1eb5b856e1259d78af5ca871 100644
--- a/dap-sdk/net/server/json_rpc/src/dap_json_rpc_request.c
+++ b/dap-sdk/net/server/json_rpc/src/dap_json_rpc_request.c
@@ -30,7 +30,7 @@ dap_json_rpc_request_t *dap_json_rpc_request_from_json(const char *a_data)
     json_object *l_jobj_id = NULL;
     json_object *l_jobj_method = NULL;
     json_object *l_jobj_params = NULL;
-    dap_json_rpc_request_t *l_request = DAP_NEW(dap_json_rpc_request_t);
+    dap_json_rpc_request_t *l_request = DAP_NEW_Z(dap_json_rpc_request_t);
     l_request->params = NULL;
     bool l_err_parse_request = false;
     if (l_jterr == json_tokener_success){
diff --git a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
index 11631fba3ea1a51343e04526bf242bce818a9b38..af5bf919e9016f320d3402637a084cff5e49045e 100644
--- a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
+++ b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c
@@ -80,6 +80,7 @@ size_t dap_stream_ch_pkt_write_f_mt(dap_stream_worker_t * a_worker , dap_stream_
     int l_data_size = dap_vsnprintf(NULL,0,a_format,ap);
     if (l_data_size <0 ){
         log_it(L_ERROR,"Can't write out formatted data '%s' with values",a_format);
+        va_end(ap);
         return 0;
     }
     l_data_size++; // To calc trailing zero
@@ -121,6 +122,7 @@ size_t dap_stream_ch_pkt_write_f_inter(dap_events_socket_t * a_queue  , dap_stre
     int l_data_size = dap_vsnprintf(NULL,0,a_format,ap);
     if (l_data_size <0 ){
         log_it(L_ERROR,"Can't write out formatted data '%s' with values",a_format);
+        va_end(ap);
         return 0;
     }
     l_data_size++; // To calc trailing zero
diff --git a/dap-sdk/net/stream/stream/dap_stream_worker.c b/dap-sdk/net/stream/stream/dap_stream_worker.c
index 191d9c0bee827d68ef6bbd4b5e829c95e98cf9a7..e4018a5be91d1f85f01904691ae27fbe790b6791 100644
--- a/dap-sdk/net/stream/stream/dap_stream_worker.c
+++ b/dap-sdk/net/stream/stream/dap_stream_worker.c
@@ -173,7 +173,11 @@ size_t dap_proc_thread_stream_ch_write_f_inter(dap_proc_thread_t * a_thread,dap_
     }
 
     dap_events_socket_t * l_es_io_input = l_thread_stream->queue_ch_io_input[a_worker->id];
-    char * l_data = DAP_NEW_SIZE(char,l_data_size+1); if (!l_data) return -1;
+    char * l_data = DAP_NEW_SIZE(char,l_data_size+1);
+    if (!l_data){
+        va_end(ap_copy);
+        return -1;
+    }
     l_data_size = dap_vsprintf(l_data,a_format,ap_copy);
     va_end(ap_copy);
 
diff --git a/modules/app-cli/dap_app_cli.c b/modules/app-cli/dap_app_cli.c
index 8f5c77ac0f8927fa956f95712e233ebef1ce257e..6c43a07e6f76790af16a24afb663ef71a3afd087 100644
--- a/modules/app-cli/dap_app_cli.c
+++ b/modules/app-cli/dap_app_cli.c
@@ -107,10 +107,13 @@ int execute_line(dap_app_cli_connect_param_t *cparam, char *line)
             cmd.cmd_param = (char**) (argv + 1);
         // Send command
         int res = dap_app_cli_post_command(cparam, &cmd);
+        DAP_DELETE(argv);
         return res;
+    }else{
+        DAP_DELETE(argv);
+        fprintf(stderr, "No command\n");
+        return -1;
     }
-    fprintf(stderr, "No command\n");
-    return -1;
 }
 
 /**
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index d117a5ef9b04728870e713df1a5336cf9aac2de4..04668d12378fe704de31e1198775e0d295214391 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -361,7 +361,7 @@ dap_chain_t * dap_chain_load_from_cfg(dap_ledger_t* a_ledger, const char * a_cha
                 //return NULL;
             }
             // add datum types
-            if(l_chain && l_datum_types_count > 0) {
+            if(l_chain && l_datum_types && l_datum_types_count > 0) {
                 l_chain->datum_types = DAP_NEW_SIZE(dap_chain_type_t, l_datum_types_count * sizeof(dap_chain_type_t));
                 uint16_t l_count_recognized = 0;
                 for(uint16_t i = 0; i < l_datum_types_count; i++) {
@@ -377,7 +377,7 @@ dap_chain_t * dap_chain_load_from_cfg(dap_ledger_t* a_ledger, const char * a_cha
                 log_it(L_WARNING, "Can't read chain mempool auto types ", l_chain_id_str);
             }
             // add datum types
-            if(l_chain && l_datum_types_count) {
+            if(l_chain && l_datum_types && l_datum_types_count) {
                 l_chain->autoproc_datum_types = DAP_NEW_SIZE(uint16_t, l_datum_types_count * sizeof(uint16_t));
                 uint16_t l_count_recognized = 0;
                 for(uint16_t i = 0; i < l_datum_types_count; i++) {
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index f5f6cad96fe314737b8a18574e8b5150665fadfa..a66f09640ef52da64d2aeb3298ddeb8fd2ac5e58 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -462,8 +462,14 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                                    (a_token_item->auth_signs_total-i-1)*sizeof (void*));
                         }
                         a_token_item->auth_signs_total--;
-                        a_token_item->auth_signs = DAP_REALLOC(a_token_item->auth_signs,a_token_item->auth_signs_total*sizeof (void*) );
-                        a_token_item->auth_signs_pkey_hash = DAP_REALLOC(a_token_item->auth_signs_pkey_hash,a_token_item->auth_signs_total*sizeof (void*) );
+                        if(a_token_item->auth_signs_total){
+                            a_token_item->auth_signs = DAP_REALLOC(a_token_item->auth_signs,a_token_item->auth_signs_total*sizeof (void*) );
+                            a_token_item->auth_signs_pkey_hash = DAP_REALLOC(a_token_item->auth_signs_pkey_hash,a_token_item->auth_signs_total*sizeof (void*) );
+                        }else{
+                            DAP_DEL_Z(a_token_item->auth_signs);
+                            DAP_DEL_Z(a_token_item->auth_signs_pkey_hash);
+                        }
+
                         break;
                     }
                 }
@@ -498,6 +504,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                         if(s_debug_more)
                             log_it(L_ERROR,"Wrong address checksum in TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD (code %d)",
                                l_add_addr_check);
+                        DAP_DELETE(l_addrs);
                         return -12;
                     }
                     // Check if its already present
@@ -508,6 +515,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                                 log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD has address %s thats already present in list",
                                    l_addr_str);
                             DAP_DELETE(l_addr_str);
+                            DAP_DELETE(l_addrs);
                             return -11;
                         }
                     }
@@ -518,6 +526,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
 
                     }else{
                         log_it(L_ERROR,"Out of memory! Can't extend TX_RECEIVER_ALLOWED array");
+                        DAP_DELETE(l_addrs);
                         return -20;
                     }
                 }else{
diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c
index feca8e4fed688bb08e98a139d485ad521ade788f..0cf200873b149659ee100d1fa9e6e0498692cdc0 100644
--- a/modules/wallet/dap_chain_wallet.c
+++ b/modules/wallet/dap_chain_wallet.c
@@ -146,8 +146,9 @@ dap_chain_wallet_t * dap_chain_wallet_create_with_seed(const char * a_wallet_nam
         return l_wallet;
     else {
         log_it(L_ERROR,"Can't save the new wallet in disk: \"%s\"",strerror(errno));
+        dap_chain_wallet_close(l_wallet);
+        return NULL;
     }
-    return NULL;
 }
 
 /**
@@ -176,10 +177,17 @@ void dap_chain_wallet_close( dap_chain_wallet_t * a_wallet)
     if(a_wallet->name)
         DAP_DELETE (a_wallet->name);
     // TODO Make clean struct dap_chain_wallet_internal_t (certs, addr)
-    DAP_DELETE(l_wallet_internal->addr);
-    DAP_DELETE(l_wallet_internal->file_name);
-    //DAP_DELETE(l_wallet_internal->certs);
-    DAP_DELETE(l_wallet_internal);
+    if(l_wallet_internal){
+        if(l_wallet_internal->addr)
+            DAP_DELETE(l_wallet_internal->addr);
+        if(l_wallet_internal->file_name)
+            DAP_DELETE(l_wallet_internal->file_name);
+        for(size_t i = 0; i<l_wallet_internal->certs_count;i++)
+            dap_cert_delete( l_wallet_internal->certs[i]);
+        DAP_DELETE(l_wallet_internal->certs);
+
+        DAP_DELETE(l_wallet_internal);
+    }
     DAP_DELETE(a_wallet);
 }
 
@@ -363,17 +371,20 @@ dap_chain_wallet_t * dap_chain_wallet_open_file(const char * a_file_name)
                         break;
                     }
                 }
-                // read certs
-                fseek(l_file,sizeof (l_file_hdr) + sizeof(uint16_t) + name_len,SEEK_SET);
-                l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_cert_t *,l_wallet_internal->certs_count * sizeof(dap_cert_t *));
-                for (i = 0; i < l_wallet_internal->certs_count; i++ ){
-                    dap_chain_wallet_cert_hdr_t l_cert_hdr={0};
-                    fread(&l_cert_hdr,1,sizeof(l_cert_hdr),l_file);
-                    uint8_t * l_data = DAP_NEW_SIZE(uint8_t,l_cert_hdr.cert_raw_size);
-                    fread(l_data,1,l_cert_hdr.cert_raw_size,l_file);
-                    l_wallet_internal->certs[i] = dap_cert_mem_load(l_data,l_cert_hdr.cert_raw_size);
-                    DAP_DELETE (l_data);
-                }
+                if(l_wallet_internal->certs_count){
+                    // read certs
+                    fseek(l_file,sizeof (l_file_hdr) + sizeof(uint16_t) + name_len,SEEK_SET);
+                    l_wallet_internal->certs = DAP_NEW_Z_SIZE(dap_cert_t *,l_wallet_internal->certs_count * sizeof(dap_cert_t *));
+                    for (i = 0; i < l_wallet_internal->certs_count; i++ ){
+                        dap_chain_wallet_cert_hdr_t l_cert_hdr={0};
+                        fread(&l_cert_hdr,1,sizeof(l_cert_hdr),l_file);
+                        uint8_t * l_data = DAP_NEW_SIZE(uint8_t,l_cert_hdr.cert_raw_size);
+                        fread(l_data,1,l_cert_hdr.cert_raw_size,l_file);
+                        l_wallet_internal->certs[i] = dap_cert_mem_load(l_data,l_cert_hdr.cert_raw_size);
+                        DAP_DELETE (l_data);
+                    }
+                }else
+                    log_it(L_WARNING,"Corrupted wallet file, no certs found in it");
                 fclose(l_file);
                 return l_wallet;
             } else {