From 946e7e534c151a5d05ebc5e025029dd5733e52a4 Mon Sep 17 00:00:00 2001
From: Evgeniy Kramsakov <evgeniy.kramsakov@demlabs.net>
Date: Tue, 5 Apr 2022 11:42:01 +0000
Subject: [PATCH] bug-5964

---
 3rdparty/json-c-darwin/json_tokener.c              |  2 +-
 dap-sdk/crypto/src/dap_enc_ringct20.c              |  7 ++-----
 dap-sdk/crypto/src/dap_sign.c                      |  1 +
 dap-sdk/crypto/src/sig_bliss/bliss_b_signatures.c  |  4 ++--
 dap-sdk/crypto/src/sig_picnic/picnic_impl.c        |  4 ++--
 dap-sdk/crypto/src/sig_tesla/sample.c              |  4 ++--
 dap-sdk/crypto/src/sig_tesla/sign.c                | 14 +++++++-------
 dap-sdk/crypto/src/sig_tesla/tesla_params.c        |  2 +-
 dap-sdk/net/server/enc_server/dap_enc_ks.c         |  1 +
 dap-sdk/net/server/http_server/dap_http.c          |  1 +
 dap-sdk/net/stream/session/dap_stream_session.c    |  1 +
 modules/chain/dap_chain_ledger.c                   |  9 +++++++++
 .../channel/chain-net/dap_stream_ch_chain_net.c    |  1 +
 .../chain-voting/dap_stream_ch_chain_voting.c      |  1 +
 modules/channel/chain/dap_stream_ch_chain.c        | 10 ++++++++--
 .../consensus/block-poa/dap_chain_cs_block_poa.c   |  1 +
 .../consensus/block-ton/dap_chain_cs_block_ton.c   |  1 +
 modules/consensus/dag-poa/dap_chain_cs_dag_poa.c   |  2 ++
 modules/global-db/dap_chain_global_db_driver_cdb.c |  2 +-
 modules/net/dap_chain_node_cli_cmd.c               | 12 ++++++------
 modules/net/dap_chain_node_client.c                |  1 +
 modules/net/dap_chain_node_dns_server.c            |  1 +
 modules/net/dap_chain_node_ping.c                  |  2 +-
 modules/net/srv/dap_chain_net_srv.c                |  1 +
 modules/service/stake/dap_chain_net_srv_stake.c    |  1 +
 .../service/xchange/dap_chain_net_srv_xchange.c    |  1 +
 modules/type/blocks/dap_chain_block.c              |  4 +++-
 modules/type/blocks/dap_chain_block_chunk.c        |  3 +++
 modules/type/dag/dap_chain_cs_dag.c                |  1 +
 29 files changed, 64 insertions(+), 31 deletions(-)

diff --git a/3rdparty/json-c-darwin/json_tokener.c b/3rdparty/json-c-darwin/json_tokener.c
index aad463a0d2..b6f9295939 100644
--- a/3rdparty/json-c-darwin/json_tokener.c
+++ b/3rdparty/json-c-darwin/json_tokener.c
@@ -136,8 +136,8 @@ struct json_tokener *json_tokener_new_ex(int depth)
 	tok->pb = printbuf_new();
 	if (!tok->pb)
 	{
+        free(tok->stack);
 		free(tok);
-		free(tok->stack);
 		return NULL;
 	}
 	tok->max_depth = depth;
diff --git a/dap-sdk/crypto/src/dap_enc_ringct20.c b/dap-sdk/crypto/src/dap_enc_ringct20.c
index a0815efcd3..8b89dec35d 100644
--- a/dap-sdk/crypto/src/dap_enc_ringct20.c
+++ b/dap-sdk/crypto/src/dap_enc_ringct20.c
@@ -534,18 +534,15 @@ int32_t ringct20_private_and_public_keys_init(ringct20_private_key_t *private_ke
 
     unsigned char *f = NULL, *g = NULL;
 
-    f = calloc(p->RINGCT20_PBK_SIZE, sizeof(char));
+    f = calloc(p->RINGCT20_PBK_SIZE, sizeof(unsigned char));
     if (f == NULL) {
-        free(f);
         return -1;
     }
     public_key->kind = p->kind;
     public_key->data = f;
 
-    g = calloc(p->RINGCT20_PRK_SIZE, sizeof(char));
+    g = calloc(p->RINGCT20_PRK_SIZE, sizeof(unsigned char));
     if (g == NULL) {
-        free(f);
-        free(g);
         return -1;
     }
 
diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c
index 0e9b6708d1..642ddf78e5 100755
--- a/dap-sdk/crypto/src/dap_sign.c
+++ b/dap-sdk/crypto/src/dap_sign.c
@@ -655,6 +655,7 @@ void dap_multi_sign_params_delete(dap_multi_sign_params_t *a_params)
  */
 bool dap_multi_sign_hash_data(dap_multi_sign_t *a_sign, const void *a_data, const size_t a_data_size, dap_chain_hash_fast_t *a_hash)
 {
+    //types missunderstanding?
     uint8_t *l_concatenated_hash = DAP_NEW_SIZE(uint8_t, 3 * sizeof(dap_chain_hash_fast_t));
     if (!dap_hash_fast(a_data, a_data_size, a_hash)) {
         DAP_DELETE(l_concatenated_hash);
diff --git a/dap-sdk/crypto/src/sig_bliss/bliss_b_signatures.c b/dap-sdk/crypto/src/sig_bliss/bliss_b_signatures.c
index 173fa49675..6b26ef9e76 100755
--- a/dap-sdk/crypto/src/sig_bliss/bliss_b_signatures.c
+++ b/dap-sdk/crypto/src/sig_bliss/bliss_b_signatures.c
@@ -492,7 +492,7 @@ int32_t bliss_b_sign(bliss_signature_t *signature,  const bliss_private_key_t *p
         return BLISS_B_NO_MEM;
       }
 
-      indices = calloc(kappa, sizeof(int32_t));
+      indices = calloc(kappa, sizeof(uint32_t));
       if(indices ==  NULL){
         free(hash);
         secure_free(&z1, n);
@@ -847,7 +847,7 @@ int32_t bliss_b_verify(const bliss_signature_t *signature,  const bliss_public_k
         return retval;
     }
 
-    indices = calloc(kappa, sizeof(int32_t));
+    indices = calloc(kappa, sizeof(uint32_t));
     if(indices ==  NULL){
         retval = BLISS_B_NO_MEM;
         delete_ntt_state(state);
diff --git a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
index 4e9b1a329b..27b4b4c977 100755
--- a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
+++ b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
@@ -306,7 +306,7 @@ void H3(const uint32_t* circuitOutput, const uint32_t* plaintext, uint32_t** vie
     /* Hash the output share from each view */
     uint32_t i;
     int j;
-    for (i = 0; i < params->numZKBRounds; i++) {
+    for (i = 0; i < params->numZKBRounds; i++) { //params->numZKBRounds should never be 0
         for (j = 0; j < 3; j++) {
             HashUpdate(&ctx, (uint8_t*)VIEW_OUTPUTS(i, j), params->stateSizeBytes);
         }
@@ -826,7 +826,7 @@ int sign(uint32_t* privateKey, uint32_t* pubKey, uint32_t* plaintext, const uint
     uint32_t** viewOutputs = malloc(params->numZKBRounds * 3 * sizeof(uint32_t*));
 
     size_t ii, jj;
-    for (ii = 0; ii < params->numZKBRounds; ii++)
+    for (ii = 0; ii < params->numZKBRounds; ii++) //params->numZKBRounds should never be 0
         for (jj = 0; jj < 3; jj++)
             VIEW_OUTPUTS(ii, jj) = views[ii][jj].outputShare;
 
diff --git a/dap-sdk/crypto/src/sig_tesla/sample.c b/dap-sdk/crypto/src/sig_tesla/sample.c
index 67da29b779..c15647aaf2 100755
--- a/dap-sdk/crypto/src/sig_tesla/sample.c
+++ b/dap-sdk/crypto/src/sig_tesla/sample.c
@@ -654,7 +654,7 @@ static uint32_t Bernoulli(int64_t r, int64_t t, tesla_param_t *p) { // Sample a
 
 void sample_gauss_poly(int64_t *x, const unsigned char *seed, int nonce, tesla_param_t *p) { // Gaussian sampler
 
-    unsigned char *seed_ex = malloc(p->PARAM_N * 8 * sizeof(char));
+    unsigned char *seed_ex = malloc(p->PARAM_N * 8 * sizeof(unsigned char));
     int64_t i, j = 0, x_ind;
     int64_t *buf = (int64_t *) seed_ex;
     int64_t sign, k, bitsremained, rbits, y, z;
@@ -865,7 +865,7 @@ void encode_c(uint32_t *pos_list, int16_t *sign_list, unsigned char *c_bin, tesl
     int pos, cnt = 0;
     int16_t *c = malloc(p->PARAM_N * sizeof(int16_t));
     const int RLENGTH = SHAKE128_RATE;
-    unsigned char *r = malloc(RLENGTH * sizeof(char));
+    unsigned char *r = malloc(RLENGTH * sizeof(unsigned char));
     uint16_t dmsp = 0;
 
     // Use the hash value as key to generate some randomness
diff --git a/dap-sdk/crypto/src/sig_tesla/sign.c b/dap-sdk/crypto/src/sig_tesla/sign.c
index 7069424936..391ef4f033 100755
--- a/dap-sdk/crypto/src/sig_tesla/sign.c
+++ b/dap-sdk/crypto/src/sig_tesla/sign.c
@@ -368,7 +368,7 @@ static void decode_sig(unsigned char *c, poly *z, const unsigned char *sm, tesla
 void hash_vm(unsigned char *c_bin, poly_k *v, const unsigned char *m, unsigned long long mlen, tesla_param_t *p)
 {
     // Hash to generate c'
-    unsigned char *t = malloc((p->PARAM_K * p->PARAM_N + mlen) * sizeof(char));
+    unsigned char *t = malloc((p->PARAM_K * p->PARAM_N + mlen) * sizeof(unsigned char));
     int64_t mask, cL, temp;
     unsigned int i, k, index;
 
@@ -621,7 +621,7 @@ static int32_t tesla_private_and_public_keys_init(tesla_private_key_t *private_k
 
     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);
@@ -630,7 +630,7 @@ static int32_t tesla_private_and_public_keys_init(tesla_private_key_t *private_k
     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);
@@ -662,8 +662,8 @@ int tesla_crypto_sign_keypair(tesla_public_key_t *public_key, tesla_private_key_
 
     if(tesla_private_and_public_keys_init( private_key, public_key, p) != 0) return -1;
 
-    unsigned char *randomness = malloc(CRYPTO_RANDOMBYTES * sizeof(char));
-    unsigned char *randomness_extended = malloc((p->PARAM_K + 3) * CRYPTO_SEEDBYTES * sizeof(char));
+    unsigned char *randomness = malloc(CRYPTO_RANDOMBYTES * sizeof(unsigned char));
+    unsigned char *randomness_extended = malloc((p->PARAM_K + 3) * CRYPTO_SEEDBYTES * sizeof(unsigned char));
 
     // Get randomness_extended <- seed_e, seed_s, seed_a, seed_y
     if(seed && seed_size>0){
@@ -900,8 +900,8 @@ int tesla_crypto_sign_open( tesla_signature_t *sig, const unsigned char *m, unsi
     unsigned char *c_sig = malloc(CRYPTO_C_BYTES);
     unsigned char *seed = malloc(CRYPTO_SEEDBYTES);
     uint32_t *pos_list = malloc(p->PARAM_W * sizeof(uint32_t));
-    int16_t *sign_list = malloc(p->PARAM_W * sizeof(uint16_t));
-    int32_t *pk_t = malloc(p->PARAM_N * p->PARAM_K * sizeof(uint32_t));
+    int16_t *sign_list = malloc(p->PARAM_W * sizeof(int16_t));
+    int32_t *pk_t = malloc(p->PARAM_N * p->PARAM_K * sizeof(int32_t));
     unsigned int k;    
     poly_k *w = malloc(p->PARAM_K * p->PARAM_N * sizeof(int64_t));
     poly_k *a = malloc(p->PARAM_K * p->PARAM_N * sizeof(int64_t));
diff --git a/dap-sdk/crypto/src/sig_tesla/tesla_params.c b/dap-sdk/crypto/src/sig_tesla/tesla_params.c
index 5ed1f42de4..6397d5242d 100755
--- a/dap-sdk/crypto/src/sig_tesla/tesla_params.c
+++ b/dap-sdk/crypto/src/sig_tesla/tesla_params.c
@@ -331,7 +331,7 @@ void poly_uniform(poly_k *a, const unsigned char *seed, tesla_param_t *p) {
     unsigned int pos = 0, i = 0, nbytes = (p->PARAM_Q_LOG + 7) / 8;
     unsigned int nblocks = p->PARAM_GEN_A;
     uint32_t val1, val2, val3, val4, mask = (uint32_t)(1 << p->PARAM_Q_LOG) - 1;
-    unsigned char *buf = malloc(SHAKE128_RATE * nblocks * sizeof(char));
+    unsigned char *buf = malloc(SHAKE128_RATE * nblocks * sizeof(unsigned char));
     uint16_t dmsp = 0;
 
     cshake128_simple( buf, SHAKE128_RATE * nblocks, dmsp++, seed, CRYPTO_RANDOMBYTES);
diff --git a/dap-sdk/net/server/enc_server/dap_enc_ks.c b/dap-sdk/net/server/enc_server/dap_enc_ks.c
index 32810ccbfb..626c1ec662 100644
--- a/dap-sdk/net/server/enc_server/dap_enc_ks.c
+++ b/dap-sdk/net/server/enc_server/dap_enc_ks.c
@@ -52,6 +52,7 @@ void dap_enc_ks_deinit()
     if (_ks) {
         dap_enc_ks_key_t *cur_item, *tmp;
         HASH_ITER(hh, _ks, cur_item, tmp) {
+            // Clang bug at this, cur_item should change at every loop cycle
             HASH_DEL(_ks, cur_item);
             _enc_key_free(&cur_item);
         }
diff --git a/dap-sdk/net/server/http_server/dap_http.c b/dap-sdk/net/server/http_server/dap_http.c
index 7af054d9ea..c47c46642f 100644
--- a/dap-sdk/net/server/http_server/dap_http.c
+++ b/dap-sdk/net/server/http_server/dap_http.c
@@ -121,6 +121,7 @@ void dap_http_delete( dap_server_t *a_server, void * a_arg )
     dap_http_url_proc_t *l_url_proc, *l_tmp;
 
     HASH_ITER( hh, l_http->url_proc ,l_url_proc, l_tmp ) {
+        // Clang bug at this, l_url_proc should change at every loop cycle
         HASH_DEL(l_http->url_proc, l_url_proc);
         if( l_url_proc->_inheritor )
             DAP_DELETE(l_url_proc->_inheritor );
diff --git a/dap-sdk/net/stream/session/dap_stream_session.c b/dap-sdk/net/stream/session/dap_stream_session.c
index 5bf946de7d..8543f776e3 100644
--- a/dap-sdk/net/stream/session/dap_stream_session.c
+++ b/dap-sdk/net/stream/session/dap_stream_session.c
@@ -54,6 +54,7 @@ void dap_stream_session_deinit()
     log_it(L_INFO,"Destroy all the sessions");
     pthread_mutex_lock(&sessions_mutex);
       HASH_ITER(hh, sessions, current, tmp) {
+          // Clang bug at this, current should change at every loop cycle
           HASH_DEL(sessions,current);
           if (current->callback_delete)
               current->callback_delete(current, NULL);
diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 519e66bfb4..c82dc2d980 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -568,6 +568,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
                         }
                         a_token_item->auth_signs_total--;
                         if(a_token_item->auth_signs_total){
+                            // Type sizeof's misunderstanding in realloc?
                             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{
@@ -584,6 +585,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
             case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_ADD:{
                 if(l_tsd->size == sizeof (dap_hash_fast_t) ){
                     a_token_item->auth_signs_total++;
+                    // Type sizeof's misunderstanding in realloc?
                     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*) );
                     a_token_item->auth_signs[a_token_item->auth_signs_total-1] = NULL;
@@ -2959,6 +2961,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     dap_chain_ledger_tx_item_t *l_item_current, *l_item_tmp;
     char *l_gdb_group;
     HASH_ITER(hh, l_ledger_priv->ledger_items , l_item_current, l_item_tmp) {
+        // Clang bug at this, l_item_current should change at every loop cycle
         HASH_DEL(l_ledger_priv->ledger_items, l_item_current);
         DAP_DELETE(l_item_current->tx);
         DAP_DELETE(l_item_current);
@@ -2972,6 +2975,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     // delete spent transactions
     dap_chain_ledger_tx_spent_item_t *l_spent_item_current, *l_spent_item_tmp;
     HASH_ITER(hh, l_ledger_priv->spent_items, l_spent_item_current, l_spent_item_tmp) {
+        // Clang bug at this, l_item_current should change at every loop cycle
         HASH_DEL(l_ledger_priv->spent_items, l_spent_item_current);
         DAP_DELETE(l_item_current);
     }
@@ -2984,6 +2988,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     // delete balances
     dap_ledger_wallet_balance_t *l_balance_current, *l_balance_tmp;
     HASH_ITER(hh, l_ledger_priv->balance_accounts, l_balance_current, l_balance_tmp) {
+        // Clang bug at this, l_balance_current should change at every loop cycle
         HASH_DEL(l_ledger_priv->balance_accounts, l_balance_current);
         DAP_DELETE(l_balance_current);
     }
@@ -2998,9 +3003,11 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     dap_chain_ledger_token_emission_item_t *l_emission_current, *l_emission_tmp;
     HASH_ITER(hh, l_ledger_priv->tokens, l_token_current, l_token_tmp) {
         HASH_DEL(l_ledger_priv->tokens, l_token_current);
+        // Clang bug at this, l_token_current should change at every loop cycle
         pthread_rwlock_wrlock(&l_token_current->token_emissions_rwlock);
         HASH_ITER(hh, l_token_current->token_emissions, l_emission_current, l_emission_tmp) {
             HASH_DEL(l_token_current->token_emissions, l_emission_current);
+            // Clang bug at this, l_emission_current should change at every loop cycle
             DAP_DELETE(l_emission_current->datum_token_emission);
             DAP_DELETE(l_emission_current);
         }
@@ -3023,12 +3030,14 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db)
     // delete threshold emissions
     HASH_ITER(hh, l_ledger_priv->threshold_emissions, l_emission_current, l_emission_tmp) {
         HASH_DEL(l_ledger_priv->threshold_emissions, l_emission_current);
+        // Clang bug at this, l_emission_current should change at every loop cycle
         DAP_DELETE(l_emission_current->datum_token_emission);
         DAP_DELETE(l_emission_current);
     }
     // delete threshold transactions
     HASH_ITER(hh, l_ledger_priv->threshold_txs, l_item_current, l_item_tmp) {
         HASH_DEL(l_ledger_priv->threshold_txs, l_item_current);
+        // Clang bug at this, l_item_current should change at every loop cycle
         DAP_DELETE(l_item_current->tx);
         DAP_DELETE(l_item_current);
     }
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index ff6ba4a25c..ce6a10d514 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -90,6 +90,7 @@ static void session_data_del(unsigned int a_id)
     pthread_mutex_lock(&s_hash_mutex);
     HASH_FIND_INT(s_chain_net_data, &a_id, l_sdata);
     if(l_sdata) {
+        // Clang bug at this, l_sdata should change at every loop cycle
         HASH_DEL(s_chain_net_data, l_sdata);
         DAP_DELETE(l_sdata);
     }
diff --git a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
index d389fa1cb0..e04d165d6f 100644
--- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
+++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
@@ -285,6 +285,7 @@ static void s_callback_send_all_unsafe(dap_client_t *a_client, void *a_arg){
 void dap_stream_ch_chain_voting_deinit() {
 	voting_node_client_list_t *l_node_info_item=NULL, *l_node_info_tmp=NULL;
     HASH_ITER(hh, s_node_client_list, l_node_info_item, l_node_info_tmp) {
+        // Clang bug at this, l_node_info_item should change at every loop cycle
         HASH_DEL(s_node_client_list, l_node_info_item);
         DAP_DELETE(l_node_info_item->node_client);
         DAP_DELETE(l_node_info_item);
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 07e7979b1c..3f3d372b74 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -162,8 +162,12 @@ void s_stream_ch_new(dap_stream_ch_t* a_ch, void* a_arg)
  */
 static void s_sync_request_delete(struct sync_request * a_sync_request)
 {
+    if (!a_sync_request) {
+        //already NULL'ed
+        return;
+    }
     if (a_sync_request->pkt.pkt_data) {
-        DAP_DELETE(a_sync_request->pkt.pkt_data);
+        DAP_DEL_Z(a_sync_request->pkt.pkt_data);
     }
 
     if (a_sync_request->gdb.db_iter) {
@@ -171,7 +175,7 @@ static void s_sync_request_delete(struct sync_request * a_sync_request)
         dap_list_free_full( a_sync_request->gdb.db_iter, free);
         a_sync_request->gdb.db_iter = NULL;
     }
-    DAP_DELETE(a_sync_request);
+    DAP_DEL_Z(a_sync_request);
 }
 
 /**
@@ -1462,6 +1466,7 @@ static void s_free_log_list_gdb ( dap_stream_ch_chain_t * a_ch_chain)
     a_ch_chain->request_db_log = NULL;
     dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL;
     HASH_ITER(hh, a_ch_chain->remote_gdbs, l_hash_item, l_tmp) {
+        // Clang bug at this, l_hash_item should change at every loop cycle
         HASH_DEL(a_ch_chain->remote_gdbs, l_hash_item);
         DAP_DELETE(l_hash_item);
     }
@@ -1496,6 +1501,7 @@ void dap_stream_ch_chain_go_idle ( dap_stream_ch_chain_t * a_ch_chain)
     dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL;
 
     HASH_ITER(hh, a_ch_chain->remote_atoms, l_hash_item, l_tmp) {
+        // Clang bug at this, l_hash_item should change at every loop cycle
         HASH_DEL(a_ch_chain->remote_atoms, l_hash_item);
         DAP_DELETE(l_hash_item);
     }
diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
index 3ee2f2763a..3c9424f31c 100644
--- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c
+++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
@@ -187,6 +187,7 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
         l_poa_pvt->auth_certs_count_verify = dap_config_get_item_uint16_default(a_chain_cfg,"block-poa","auth_certs_number_verify",0);
         l_poa_pvt->auth_certs_prefix = strdup ( dap_config_get_item_str(a_chain_cfg,"block-poa","auth_certs_prefix") );
         if (l_poa_pvt->auth_certs_count && l_poa_pvt->auth_certs_count_verify ) {
+            // Type sizeof's misunderstanding in malloc?
             l_poa_pvt->auth_certs = DAP_NEW_Z_SIZE ( dap_cert_t *, l_poa_pvt->auth_certs_count * sizeof(dap_cert_t));
             char l_cert_name[512];
             for (size_t i = 0; i < l_poa_pvt->auth_certs_count ; i++ ){
diff --git a/modules/consensus/block-ton/dap_chain_cs_block_ton.c b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
index 0e4b243d91..298f03a2f8 100644
--- a/modules/consensus/block-ton/dap_chain_cs_block_ton.c
+++ b/modules/consensus/block-ton/dap_chain_cs_block_ton.c
@@ -782,6 +782,7 @@ static bool s_session_round_finish(dap_chain_cs_block_ton_items_t *a_session) {
 
     dap_chain_cs_block_ton_message_item_t *l_message_item=NULL, *l_message_tmp=NULL;
     HASH_ITER(hh, a_session->old_round.messages_items, l_message_item, l_message_tmp) {
+        // Clang bug at this, l_message_item should change at every loop cycle
         HASH_DEL(a_session->old_round.messages_items, l_message_item);
         DAP_DELETE(l_message_item->message);
         DAP_DELETE(l_message_item);
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 60ebc253d5..0fc6584bf9 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -222,6 +222,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
         if (!l_event_hash_hex_str) {
             DAP_DELETE(l_event_hash_base58_str);
             dap_chain_node_cli_set_reply_text(a_str_reply, "Invalid base58 hash format");
+            return -6;
         }
 
         DAP_DELETE(l_event_hash_hex_str);
@@ -358,6 +359,7 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
         l_poa_pvt->wait_sync_before_complete = dap_config_get_item_uint32_default(a_chain_cfg,"dag-poa","wait_sync_before_complete",180);
         l_poa_pvt->auth_certs_prefix = strdup ( dap_config_get_item_str(a_chain_cfg,"dag-poa","auth_certs_prefix") );
         if (l_poa_pvt->auth_certs_count && l_poa_pvt->auth_certs_count_verify ) {
+            // Type sizeof's misunderstanding in malloc?
             l_poa_pvt->auth_certs = DAP_NEW_Z_SIZE ( dap_cert_t *, l_poa_pvt->auth_certs_count * sizeof(dap_cert_t));
             char l_cert_name[512];
             for (size_t i = 0; i < l_poa_pvt->auth_certs_count ; i++ ){
diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c
index 4e1d0fd37d..a3c3670895 100644
--- a/modules/global-db/dap_chain_global_db_driver_cdb.c
+++ b/modules/global-db/dap_chain_global_db_driver_cdb.c
@@ -227,7 +227,7 @@ pcdb_instance dap_cdb_init_group(const char *a_group, int a_flags) {
         DAP_DELETE(l_cdb_i->local_group);
         cdb_destroy(l_cdb_i->cdb);
         HASH_DEL(s_cdb, l_cdb_i);
-        DAP_DELETE(l_cdb_i);
+        DAP_DEL_Z(l_cdb_i);
     }
 
 FIN:
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 5a6dfbec62..8689075ae2 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -3240,9 +3240,9 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
     dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s with 256bit token %s is%s placed in datum pool",
                                       l_key_str_out, l_ticker, l_placed ? "" : " not");
     if (l_key_str_out != l_key_str)
-        DAP_DELETE(l_key_str);
-    DAP_DELETE(l_key_str);
-    DAP_DELETE(l_datum);
+        DAP_DEL_Z(l_key_str);
+    DAP_DEL_Z(l_key_str);
+    DAP_DEL_Z(l_datum);
     if (!l_placed) {
         l_ret = -2;
     }
@@ -3462,12 +3462,12 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         dap_chain_node_cli_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is%s placed in datum pool",
                                           str_reply_tmp, l_tx_hash_str, l_placed ? "" : " not");
         DAP_DEL_Z(l_tx_hash_str);
-//@RRL        DAP_DELETE(str_reply_tmp);
+        DAP_DEL_Z(str_reply_tmp);
     } else{ // if transaction was not specified when emission was added we need output only emission result
         dap_chain_node_cli_set_reply_text(a_str_reply, str_reply_tmp);
     }
-    DAP_DELETE(str_reply_tmp);
-    DAP_DELETE(l_addr);
+    DAP_DEL_Z(str_reply_tmp);
+    DAP_DEL_Z(l_addr);
     DAP_DEL_Z(l_certs);
     return 0;
 }
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 9b95cbbdac..4024d028d4 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -115,6 +115,7 @@ void dap_chain_node_client_deinit()
 {
     dap_chain_node_client_handle_t *l_client = NULL, *l_tmp = NULL;
     HASH_ITER(hh, s_clients,l_client, l_tmp){
+        // Clang bug at this, l_client should change at every loop cycle
         HASH_DEL(s_clients,l_client);
         DAP_DELETE(l_client);
     }
diff --git a/modules/net/dap_chain_node_dns_server.c b/modules/net/dap_chain_node_dns_server.c
index 3f933f7d7b..27d0ec5674 100644
--- a/modules/net/dap_chain_node_dns_server.c
+++ b/modules/net/dap_chain_node_dns_server.c
@@ -276,6 +276,7 @@ void dap_dns_server_stop() {
 
     dap_dns_zone_hash_t *current_zone, *tmp;
     HASH_ITER(hh, s_dns_server->hash_table, current_zone, tmp) {
+        // Clang bug at this, current_zone should change at every loop cycle
         HASH_DEL(s_dns_server->hash_table, current_zone);
         DAP_DELETE(current_zone->zone);
         DAP_DELETE(current_zone);
diff --git a/modules/net/dap_chain_node_ping.c b/modules/net/dap_chain_node_ping.c
index f9237097f5..c99f76238d 100644
--- a/modules/net/dap_chain_node_ping.c
+++ b/modules/net/dap_chain_node_ping.c
@@ -204,7 +204,7 @@ static void* node_ping_background_proc(void *a_arg)
     // select the nearest node from the list
     unsigned int l_nodes_count = dap_list_length(l_node_list);
     unsigned int l_thread_id = 0;
-    pthread_t *l_threads = DAP_NEW_Z_SIZE(pthread_t, sizeof(pthread_t) * l_nodes_count);
+    pthread_t *l_threads = DAP_NEW_Z_SIZE(pthread_t, sizeof(pthread_t) * l_nodes_count); //Need to check for NULL
     uint64_t *l_nodes_addr = DAP_NEW_Z_SIZE(uint64_t, sizeof(uint64_t) * l_nodes_count);
     dap_list_t *l_node_list0 = l_node_list;
 
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index f6ab77a56c..64a9bc7e57 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -856,6 +856,7 @@ void dap_chain_net_srv_del_all(void)
     pthread_mutex_lock(&s_srv_list_mutex);
     HASH_ITER(hh, s_srv_list , l_sdata, l_sdata_tmp)
     {
+        // Clang bug at this, l_sdata should change at every loop cycle
         HASH_DEL(s_srv_list, l_sdata);
         pthread_mutex_destroy(&l_sdata->srv->banlist_mutex);
         DAP_DELETE(l_sdata->srv);
diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c
index b0cdb80a5b..ffa24ad6fb 100644
--- a/modules/service/stake/dap_chain_net_srv_stake.c
+++ b/modules/service/stake/dap_chain_net_srv_stake.c
@@ -142,6 +142,7 @@ void dap_chain_net_srv_stake_deinit()
 {
     dap_chain_net_srv_stake_item_t *l_stake = NULL, *l_tmp;
     HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp) {
+        // Clang bug at this, l_stake should change at every loop cycle
         HASH_DEL(s_srv_stake->itemlist, l_stake);
         DAP_DELETE(l_stake);
     }
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index f3fa4ae7e6..02a8147423 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -93,6 +93,7 @@ void dap_chain_net_srv_xchange_deinit()
         return;
     dap_chain_net_srv_xchange_price_t *l_price = NULL, *l_tmp;
     HASH_ITER(hh, s_srv_xchange->pricelist, l_price, l_tmp) {
+        // Clang bug at this, l_price should change at every loop cycle
         HASH_DEL(s_srv_xchange->pricelist, l_price);
         DAP_DELETE(l_price->wallet_str);
         DAP_DELETE(l_price->key_ptr);
diff --git a/modules/type/blocks/dap_chain_block.c b/modules/type/blocks/dap_chain_block.c
index 0cd60f4859..0c36a15ecc 100644
--- a/modules/type/blocks/dap_chain_block.c
+++ b/modules/type/blocks/dap_chain_block.c
@@ -60,7 +60,8 @@ void dap_chain_block_deinit()
  */
 dap_chain_block_t *dap_chain_block_new(dap_chain_hash_fast_t *a_prev_block, size_t *a_block_size)
 {
-    dap_chain_block_t * l_block = DAP_NEW_Z_SIZE(dap_chain_block_t,sizeof(l_block->hdr));
+    // Type sizeof's misunderstanding in malloc?
+    dap_chain_block_t * l_block = DAP_NEW_Z_SIZE (dap_chain_block_t,sizeof(l_block->hdr));
     if( l_block == NULL){
         log_it(L_CRITICAL, "Can't allocate memory for the new block");
         return NULL;
@@ -556,6 +557,7 @@ void dap_chain_block_meta_extract(dap_chain_block_meta_t ** a_meta, size_t a_met
             case DAP_CHAIN_BLOCK_META_LINK:
                 if ( a_block_links && a_block_links_count){
                     if ( *a_block_links_count == 0 ){
+                        // Type sizeof's misunderstanding in malloc?
                         *a_block_links = DAP_NEW_Z_SIZE(dap_chain_hash_fast_t, sizeof (dap_chain_hash_fast_t *) *l_links_count_max);
                         *a_block_links_count = 0;
                     }else if ( *a_block_links_count == l_links_count_max ){
diff --git a/modules/type/blocks/dap_chain_block_chunk.c b/modules/type/blocks/dap_chain_block_chunk.c
index 89386ed06b..80f143f2aa 100644
--- a/modules/type/blocks/dap_chain_block_chunk.c
+++ b/modules/type/blocks/dap_chain_block_chunk.c
@@ -62,12 +62,14 @@ void dap_chain_block_chunks_delete(dap_chain_block_chunks_t * a_chunks)
     while(l_chunk){
         dap_chain_block_cache_hash_t* l_block_cache_hash = NULL, *l_tmp = NULL;
         HASH_ITER(hh, l_chunk->block_cache_hash , l_block_cache_hash, l_tmp){
+            // Clang bug at this, l_block_cache_hash should change at every loop cycle
             HASH_DEL(l_chunk->block_cache_hash, l_block_cache_hash);
             DAP_DELETE(l_block_cache_hash);
         }
     }
     dap_chain_block_cache_t* l_block_cache = NULL, *l_tmp = NULL;
     HASH_ITER(hh, a_chunks->cache , l_block_cache, l_tmp){
+        // Clang bug at this, l_block_cache should change at every loop cycle
         HASH_DEL(a_chunks->cache, l_block_cache);
         dap_chain_block_cache_delete(l_block_cache);
     }
@@ -177,6 +179,7 @@ void dap_chain_block_chunk_delete( dap_chain_block_chunk_t * a_chunk)
 {
     dap_chain_block_cache_hash_t  * l_cache_hash = NULL, *l_tmp = NULL;
     HASH_ITER(hh, a_chunk->block_cache_hash, l_cache_hash, l_tmp){
+        // Clang bug at this, l_cache_hash should change at every loop cycle
         HASH_DEL(a_chunk->block_cache_hash, l_cache_hash);
         DAP_DELETE(l_cache_hash);
     }
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index ee7c676a2d..c3800041c2 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -294,6 +294,7 @@ static void s_dap_chain_cs_dag_purge(dap_chain_t *a_chain)
     dap_chain_cs_dag_pvt_t *l_dag_pvt = PVT(DAP_CHAIN_CS_DAG(a_chain));
     pthread_rwlock_wrlock(&l_dag_pvt->events_rwlock);
     dap_chain_cs_dag_event_item_t *l_event_current, *l_event_tmp;
+    // Clang bug at this, l_event_current should change at every loop cycle
     HASH_ITER(hh, l_dag_pvt->events, l_event_current, l_event_tmp) {
         HASH_DEL(l_dag_pvt->events, l_event_current);
         DAP_DELETE(l_event_current);
-- 
GitLab