From acf23246c507a077c545feaef9dfb0cb0aee1c55 Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Tue, 5 May 2020 05:34:07 +0700
Subject: [PATCH] [!] Fixed increadble bug with dap_list_t [*] Other fixes

---
 dap-sdk/core/src/dap_list.c                   |  8 ++--
 dap-sdk/net/client/dap_client.c               |  2 +-
 dap-sdk/net/core/dap_events.c                 |  2 +-
 .../http_server/http_client/dap_http_client.c |  2 +-
 modules/net/dap_chain_net.c                   |  2 +-
 modules/net/dap_chain_node_cli_cmd.c          | 38 ++++++++++++++++++-
 6 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/dap-sdk/core/src/dap_list.c b/dap-sdk/core/src/dap_list.c
index 1d043eac17..4c6ee31c2b 100755
--- a/dap-sdk/core/src/dap_list.c
+++ b/dap-sdk/core/src/dap_list.c
@@ -15,13 +15,13 @@
  * dap_list_alloc:
  * Returns: a pointer to the newly-allocated DapList element
  **/
-dap_list_t *dap_list_alloc(void)
+dap_list_t *dap_list_alloc_no_z(void)
 {
     dap_list_t *list = DAP_NEW(dap_list_t);
     return list;
 }
 
-dap_list_t *dap_list_alloc0(void)
+dap_list_t *dap_list_alloc(void)
 {
     dap_list_t *list = DAP_NEW_Z(dap_list_t);
     return list;
@@ -796,7 +796,7 @@ static dap_list_t* dap_list_insert_sorted_real(dap_list_t *list, void* data, dap
 
     if(!list)
     {
-        new_list = dap_list_alloc0();
+        new_list = dap_list_alloc();
         new_list->data = data;
         return new_list;
     }
@@ -810,7 +810,7 @@ static dap_list_t* dap_list_insert_sorted_real(dap_list_t *list, void* data, dap
         cmp = ((dap_callback_compare_data_t) func)(data, tmp_list->data, user_data);
     }
 
-    new_list = dap_list_alloc0();
+    new_list = dap_list_alloc();
     new_list->data = data;
 
     if((!tmp_list->next) && (cmp > 0))
diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c
index 14ed72dff2..fd7416b830 100644
--- a/dap-sdk/net/client/dap_client.c
+++ b/dap-sdk/net/client/dap_client.c
@@ -264,7 +264,7 @@ void dap_client_go_stage(dap_client_t * a_client, dap_client_stage_t a_stage_tar
  */
 void m_stage_fsm_operator(dap_client_t * a_client, void * a_arg)
 {
-    (void *) a_arg;
+    UNUSED(a_arg);
     dap_client_pvt_t * l_client_internal = DAP_CLIENT_PVT(a_client);
     if(!l_client_internal){
         log_it(L_ERROR, "FSM Op: l_client_internal is NULL!");
diff --git a/dap-sdk/net/core/dap_events.c b/dap-sdk/net/core/dap_events.c
index d6efd10913..936484554a 100644
--- a/dap-sdk/net/core/dap_events.c
+++ b/dap-sdk/net/core/dap_events.c
@@ -347,7 +347,7 @@ static void *thread_worker_function(void *arg)
                 if(cur->type == DESCRIPTOR_TYPE_SOCKET) {
                     bytes_read = recv(cur->socket, (char *) (cur->buf_in + cur->buf_in_size),
                             sizeof(cur->buf_in) - cur->buf_in_size, 0);
-                }else if(cur->type = DESCRIPTOR_TYPE_FILE) {
+                }else if(cur->type == DESCRIPTOR_TYPE_FILE) {
                     bytes_read = read(cur->socket, (char *) (cur->buf_in + cur->buf_in_size),
                             sizeof(cur->buf_in) - cur->buf_in_size);
                 }
diff --git a/dap-sdk/net/server/http_server/http_client/dap_http_client.c b/dap-sdk/net/server/http_server/http_client/dap_http_client.c
index e7944d411b..81cdd8cdfe 100644
--- a/dap-sdk/net/server/http_server/http_client/dap_http_client.c
+++ b/dap-sdk/net/server/http_server/http_client/dap_http_client.c
@@ -367,7 +367,7 @@ void dap_http_client_read( dap_client_remote_t *cl, void *arg )
 
       char *query_string;
 
-      if( query_string = strchr(cl_ht->url_path, '?') ) {
+      if( (query_string = strchr(cl_ht->url_path, '?')) != NULL ) {
 
         size_t len_after = strlen( query_string + 1 );
 
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index afcc63f34c..357f3e6baa 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1440,7 +1440,7 @@ int s_net_load(const char * a_net_name)
                         log_it( L_DEBUG, "Resolve %s addr", l_seed_nodes_hostnames[i]);
                         struct hostent *l_he;
 
-                        if ( l_he = gethostbyname (l_seed_nodes_hostnames[i])   ){
+                        if ( (l_he = gethostbyname (l_seed_nodes_hostnames[i]) ) != NULL  ){
                             struct in_addr **l_addr_list = (struct in_addr **) l_he->h_addr_list;
                             for(int i = 0; l_addr_list[i] != NULL; i++ ) {
                                 log_it( L_NOTICE, "Resolved %s to %s (ipv4)", l_seed_nodes_hostnames[i] ,
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 52e6d728d8..9bc9009b6f 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2440,7 +2440,7 @@ int com_token_update(int argc, char ** argv, void *arg_func, char ** a_str_reply
                         sizeof(l_datum_token_update->header_private),
                         0);
                 size_t l_sign_size = dap_sign_get_size(l_sign);
-                l_datum_token_update = DAP_REALLOC(l_datum_token_update, sizeof(dap_chain_datum_token_t) + l_datum_data_offset + l_sign_size);
+                l_datum_token_update = DAP_REALLOC(l_datum_token_update, sizeof(dap_chain_datum_token_t) +l_tsd_total_size + l_datum_data_offset + l_sign_size);
                 memcpy(l_datum_token_update->data_n_tsd + l_datum_data_offset, l_sign, l_sign_size);
                 l_datum_data_offset += l_sign_size;
                 DAP_DELETE(l_sign);
@@ -2681,11 +2681,13 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
             if(l_certs_count > l_signs_total)
                 l_certs_count = l_signs_total;
 
+            log_it(L_DEBUG,"Prepeared TSD sections on %zd total size", l_tsd_total_size);
             // Create new datum token
             l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t)+l_tsd_total_size ) ;
             l_datum_token->type = DAP_CHAIN_DATUM_TOKEN_PRIVATE_DECL;
             dap_snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker);
             l_datum_token->header_private_decl.flags = l_flags;
+            log_it(L_DEBUG,"Token declaration '%s' initialized", l_datum_token->ticker);
 
             // Sign header with all certificates in the list and add signs to the end of ticker declaration
             // Important:
@@ -2695,15 +2697,47 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply)
                         sizeof(l_datum_token->header_private),
                         0);
                 size_t l_sign_size = dap_sign_get_size(l_sign);
-                l_datum_token = DAP_REALLOC(l_datum_token, sizeof(dap_chain_datum_token_t) + l_datum_data_offset + l_sign_size);
+                l_datum_token = DAP_REALLOC(l_datum_token, sizeof(dap_chain_datum_token_t) +l_tsd_total_size + l_datum_data_offset + l_sign_size);
                 memcpy(l_datum_token->data_n_tsd + l_datum_data_offset, l_sign, l_sign_size);
                 l_datum_data_offset += l_sign_size;
                 DAP_DELETE(l_sign);
+                log_it(L_DEBUG,"<-- Signed with '%s'", l_certs[i]->name);
             }
 
             // Add TSD sections in the end
             for ( dap_list_t* l_iter=dap_list_first(l_tsd_list); l_iter; l_iter=l_iter->next){
                 dap_chain_datum_token_tsd_t * l_tsd = (dap_chain_datum_token_tsd_t *) l_iter->data;
+                if (l_tsd == NULL){
+                    log_it(L_ERROR, "NULL tsd in list!");
+                    continue;
+                }
+                switch (l_tsd->type){
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:
+                        log_it(L_DEBUG,"== TOTAL_SUPPLY: %llf.20",
+                               dap_chain_balance_to_coins( dap_chain_datum_token_tsd_get_scalar(l_tsd,uint128_t) ) );
+                    break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID:
+                        log_it(L_DEBUG,"== TOTAL_SIGNS_VALID: %u",
+                                dap_chain_datum_token_tsd_get_scalar(l_tsd,uint16_t) );
+                    break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD:
+                        log_it(L_DEBUG,"== TX_SENDER_ALLOWED_ADD: %s",
+                                dap_chain_datum_token_tsd_get_string_const(l_tsd) );
+                    break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD:
+                        log_it(L_DEBUG,"== TX_SENDER_BLOCKED_ADD: %s",
+                                dap_chain_datum_token_tsd_get_string_const(l_tsd) );
+                    break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD:
+                        log_it(L_DEBUG,"== TX_RECEIVER_ALLOWED_ADD: %s",
+                                dap_chain_datum_token_tsd_get_string_const(l_tsd) );
+                    break;
+                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD:
+                        log_it(L_DEBUG,"== TX_RECEIVER_BLOCKED_ADD: %s",
+                                dap_chain_datum_token_tsd_get_string_const(l_tsd) );
+                    break;
+                    default: log_it(L_DEBUG, "== 0x%04X: binary data %zd size ",l_tsd->type, l_tsd->size );
+                }
                 size_t l_tsd_size = dap_chain_datum_token_tsd_size( l_tsd);
                 memcpy(l_datum_token->data_n_tsd + l_datum_data_offset, l_tsd, l_tsd_size);
                 l_datum_data_offset += l_tsd_size;
-- 
GitLab