diff --git a/dap-sdk/core/src/dap_strfuncs.c b/dap-sdk/core/src/dap_strfuncs.c index a766b125633417400291f7f06c78a35b2ed9a02f..904fab7c41b83fcf77648d36cb56309edbe76572 100755 --- a/dap-sdk/core/src/dap_strfuncs.c +++ b/dap-sdk/core/src/dap_strfuncs.c @@ -238,13 +238,14 @@ int dap_strncmp(const char *a_str1, const char *a_str2, size_t a_n) char* dap_strdup(const char *a_str) { char *l_new_str; - size_t l_length; - if(a_str) - { - l_length = (size_t) (strlen(a_str) + 1); - l_new_str = DAP_NEW_SIZE(char, l_length); - memcpy(l_new_str, a_str, l_length); + if(a_str){ + size_t l_length = (size_t) (strlen(a_str) + 1); + if(l_length){ + l_new_str = DAP_NEW_SIZE(char, l_length); + memcpy(l_new_str, a_str, l_length); + }else + l_new_str = NULL; } else l_new_str = NULL; diff --git a/dap-sdk/net/client/dap_client.c b/dap-sdk/net/client/dap_client.c index 53a938ce7c74a321ad2d7cfdf1dfce4fdc1c0fac..0e3070346e2fa3fb9f061b1c6c17bf53e47e0e70 100644 --- a/dap-sdk/net/client/dap_client.c +++ b/dap-sdk/net/client/dap_client.c @@ -120,6 +120,7 @@ void dap_client_set_uplink_unsafe(dap_client_t * a_client,const char* a_addr, ui log_it(L_ERROR,"Client is NULL for dap_client_set_uplink"); return; } + DAP_DEL_Z(DAP_CLIENT_PVT(a_client)->uplink_addr); DAP_CLIENT_PVT(a_client)->uplink_addr = strdup(a_addr); DAP_CLIENT_PVT(a_client)->uplink_port = a_port; } diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index 9fb9c3354e05dc382cf2f02d2c6030517e5c4a60..998681855ea756b9b93675243fc2bd8decab31a7 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -175,6 +175,9 @@ void dap_client_pvt_delete(dap_client_pvt_t * a_client_pvt) if(s_debug_more) log_it(L_INFO, "dap_client_pvt_delete 0x%x", a_client_pvt); + if(a_client_pvt->uplink_addr) + DAP_DELETE(a_client_pvt->uplink_addr); + if(a_client_pvt->session_key_id) DAP_DELETE(a_client_pvt->session_key_id); @@ -799,13 +802,17 @@ void dap_client_pvt_request_enc(dap_client_pvt_t * a_client_internal, const char } */ int l_off; - char *l_path = DAP_NEW_S_SIZE(char, l_query_enc_size_max + l_sub_url_enc_size_max + 1); + size_t l_path_size= l_query_enc_size_max + l_sub_url_enc_size_max + 1; + char *l_path = DAP_NEW_S_SIZE(char, l_path_size); + l_path[0] = '\0'; if(a_path) { - if(l_sub_url_size) - { - l_off = l_query_size - ? dap_snprintf(l_path, l_query_enc_size_max + l_sub_url_enc_size_max + 1, "%s/%s?%s", a_path, l_sub_url_enc, l_query_enc) - : dap_snprintf(l_path, l_sub_url_enc_size_max + 1, "%s/%s", a_path, l_sub_url_enc); + if(l_sub_url_size){ + if(l_query_size){ + dap_snprintf(l_path, l_path_size, "%s/%s?%s", a_path, l_sub_url_enc, + l_query_enc?l_query_enc:""); + }else{ + dap_snprintf(l_path, l_path_size, "%s/%s", a_path, l_sub_url_enc); + } } else { dap_stpcpy(l_path, a_path); } diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index 526fcc13bcddd84efcd031d85da07e77a0b90076..15c010b78c89105ce02ec1c31199764441583228 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -1859,29 +1859,29 @@ size_t dap_events_socket_write_unsafe(dap_events_socket_t *sc, const void * data /** * @brief dap_events_socket_write_f Write formatted text to the client - * @param sc Conn instance - * @param format Format + * @param a_es Conn instance + * @param a_format Format * @return Number of bytes that were placed into the buffer */ -size_t dap_events_socket_write_f_unsafe(dap_events_socket_t *sc, const char * format,...) +size_t dap_events_socket_write_f_unsafe(dap_events_socket_t *a_es, const char * a_format,...) { //log_it(L_DEBUG,"dap_events_socket_write_f %u sock", sc->socket ); - size_t l_max_data_size = sc->buf_out_size_max - sc->buf_out_size; + size_t l_max_data_size = a_es->buf_out_size_max - a_es->buf_out_size; if (! l_max_data_size) return 0; - va_list ap; - va_start(ap, format); - int ret=dap_vsnprintf((char*)sc->buf_out + sc->buf_out_size, l_max_data_size, format, ap); - va_end(ap); - if(ret > 0) { - sc->buf_out_size += (unsigned int)ret; + va_list l_ap; + va_start(l_ap, a_format); + int l_ret=dap_vsnprintf( ((char*)a_es->buf_out) + a_es->buf_out_size, l_max_data_size, a_format, l_ap); + va_end(l_ap); + if(l_ret > 0) { + a_es->buf_out_size += (unsigned int)l_ret; } else { - log_it(L_ERROR,"Can't write out formatted data '%s'", format); + log_it(L_ERROR,"Can't write out formatted data '%s'", a_format); } - dap_events_socket_set_writable_unsafe(sc, true); - return (ret > 0) ? (unsigned int)ret : 0; + dap_events_socket_set_writable_unsafe(a_es, true); + return (l_ret > 0) ? (unsigned int)l_ret : 0; } /** diff --git a/dap-sdk/net/core/dap_proc_queue.c b/dap-sdk/net/core/dap_proc_queue.c index c15065b8f003f4951d4d29581a46b8ba5f9959ac..8172eb8d60b660e6eab79afc09a12cf3bd83fc0f 100644 --- a/dap-sdk/net/core/dap_proc_queue.c +++ b/dap-sdk/net/core/dap_proc_queue.c @@ -75,6 +75,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg) dap_proc_queue_item_t * l_item = DAP_NEW_Z(dap_proc_queue_item_t); if (! l_item){ log_it(L_CRITICAL,"Can't allocate memory for callback item, exiting"); + DAP_DELETE(l_msg); return; } l_item->callback = l_msg->callback; @@ -98,7 +99,7 @@ static void s_queue_esocket_callback( dap_events_socket_t * a_es, void * a_msg) if (l_msg->signal_kill){ // Say to kill this object and delete its inherior dap_proc_queue_t a_es->flags |= DAP_SOCK_SIGNAL_CLOSE; } - DAP_DEL_Z(l_msg) + DAP_DELETE(l_msg); } /** diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index c65f0eac501459dc77e6efa6b4890207962aa211..fac3c794a9d376afc6715976a2eb9f3b8bb2ae17 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -503,7 +503,6 @@ static bool s_sync_in_chains_callback(dap_proc_thread_t *a_thread, void *a_arg) dap_chain_hash_fast_to_str(&l_atom_hash,l_atom_hash_str,sizeof (l_atom_hash_str)-1 ); log_it(L_WARNING,"Not accepted atom (code ATOM_PASS) with hash %s for %s:%s and moved into the treshold", l_atom_hash_str, l_chain->net_name, l_chain->name); } - DAP_DELETE(l_atom_copy); }else{ if (s_debug_more){ char l_atom_hash_str[72]={[0]='\0'}; @@ -511,7 +510,7 @@ static bool s_sync_in_chains_callback(dap_proc_thread_t *a_thread, void *a_arg) log_it(L_WARNING,"Not accepted atom (code %d) with hash %s for %s:%s", l_atom_add_res, l_atom_hash_str, l_chain->net_name, l_chain->name); } } - + DAP_DEL_Z(l_atom_copy); } else { if (s_debug_more){ char l_atom_hash_str[72]={[0]='\0'}; diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c index ed60de95fa902ae404f9d8e227bd63c4fffcf817..06a3df71f813b3e8754cdb9bf8f239c0c2f7258e 100644 --- a/modules/global-db/dap_chain_global_db_remote.c +++ b/modules/global-db/dap_chain_global_db_remote.c @@ -136,10 +136,8 @@ uint64_t dap_db_get_last_id_remote(uint64_t a_node_addr) bool dap_db_set_last_hash_remote(uint64_t a_node_addr, dap_chain_t *a_chain, dap_chain_hash_fast_t *a_hash) { //log_it( L_DEBUG, "Node 0x%016X set last synced timestamp %llu", a_id); - dap_chain_hash_fast_t *l_hash = DAP_NEW(dap_chain_hash_fast_t); - memcpy(l_hash, a_hash, sizeof(*a_hash)); return dap_chain_global_db_gr_set(dap_strdup_printf("%ju%s%s", a_node_addr, a_chain->net_name, a_chain->name), - l_hash, sizeof(*l_hash), GROUP_LOCAL_NODE_LAST_ID); + a_hash, sizeof(*a_hash), GROUP_LOCAL_NODE_LAST_ID); } /** diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 06ec78f689202b365b99a8c5f99455a4a8d03e6c..c7f56e6332f6b42f0b371239cd08b3f789b20ce6 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -647,7 +647,7 @@ static void s_net_state_link_prepare_success(dap_worker_t * a_worker,dap_chain_n "address:\""NODE_ADDR_FP_STR"\"" "}\n", l_net->pub.id.uint64, a_node_info->hdr.cell_id.uint64, NODE_ADDR_FP_ARGS_S(a_node_info->hdr.address)); - + DAP_DELETE(l_dns_request); } /** @@ -687,10 +687,12 @@ static void s_net_state_link_prepare_error(dap_worker_t * a_worker,dap_chain_nod pthread_rwlock_unlock(&l_net_pvt->rwlock); s_fill_links_from_root_aliases(l_net); dap_proc_queue_add_callback_inter( a_worker->proc_queue_input,s_net_states_proc,l_net ); + DAP_DELETE(l_dns_request); return; } } pthread_rwlock_unlock(&l_net_pvt->rwlock); + DAP_DELETE(l_dns_request); } /** diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index d45bc720bd02b8bdaff9ca3e3c5dddcded60c8c9..0aef4479770b0ed353d7a0d09e5c71dde8c2d1bf 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -188,21 +188,25 @@ static bool s_timer_update_states_callback(void * a_arg ) assert(l_es_handler); dap_events_socket_t * l_es = l_es_handler->esocket; uint128_t l_es_uuid = l_es_handler->uuid; - DAP_DEL_Z(l_es_handler); // check if esocket still in worker if(dap_events_socket_check_unsafe(l_worker,l_es)){ // Check if its exactly ours! if (dap_uint128_check_equal(l_es->uuid,l_es_uuid)){ dap_client_t * l_client = dap_client_from_esocket(l_es); - if(! l_client ) + if(! l_client ){ + DAP_DELETE(l_es_handler); return false; + } dap_chain_node_client_t * l_node_client = (dap_chain_node_client_t*) l_client->_inheritor; - if(! l_node_client) // No active node client + if(! l_node_client){ // No active node client + DAP_DELETE(l_es_handler); return false; - - if(! l_node_client->ch_chain) // No active ch channel + } + if(! l_node_client->ch_chain){ // No active ch channel + DAP_DELETE(l_es_handler); return false; + } dap_stream_ch_chain_t * l_ch_chain = (dap_stream_ch_chain_t*) l_node_client->ch_chain->internal; assert(l_ch_chain); dap_chain_net_t * l_net = l_node_client->net; @@ -225,10 +229,14 @@ static bool s_timer_update_states_callback(void * a_arg ) } return true; - }else + }else{ + DAP_DELETE(l_es_handler); return false; - }else + } + }else{ + DAP_DELETE(l_es_handler); return false; + } } /** diff --git a/modules/net/dap_chain_node_dns_client.c b/modules/net/dap_chain_node_dns_client.c index 2ed130ddc37e8712b96d3f3eface9f4dc32a6292..df023da94b325ea5b790d3f768a6fa50bfd0ef2b 100644 --- a/modules/net/dap_chain_node_dns_client.c +++ b/modules/net/dap_chain_node_dns_client.c @@ -127,7 +127,9 @@ static void s_dns_client_esocket_error_callback(dap_events_socket_t * a_esocket, */ static bool s_dns_client_esocket_timeout_callback(void * a_arg) { - dap_events_socket_t * l_es = (dap_events_socket_t*) a_arg; + dap_events_socket_handler_t * l_es_handler = (dap_events_socket_handler_t *) a_arg; + assert(l_es_handler); + dap_events_socket_t * l_es = l_es_handler->esocket; assert(l_es); dap_events_t * l_events = dap_events_get_default(); assert(l_events); @@ -135,6 +137,18 @@ static bool s_dns_client_esocket_timeout_callback(void * a_arg) dap_worker_t * l_worker = dap_events_get_current_worker(l_events); // We're in own esocket context assert(l_worker); + if(dap_events_socket_check_unsafe(l_worker ,l_es)){ + if(dap_uint128_check_equal(l_es->uuid, l_es_handler->uuid)){ // Pointer is present but alien + DAP_DELETE(l_es_handler); + return false; + }else + DAP_DELETE(l_es_handler); + }else{ // No such pointer + DAP_DELETE(l_es_handler); + return false; + } + + struct dns_client * l_dns_client = (struct dns_client*) l_es->_inheritor; if(dap_events_socket_check_unsafe(l_worker, l_es) ){ // If we've not closed this esocket @@ -236,8 +250,12 @@ void dap_chain_node_info_dns_request(struct in_addr a_addr, uint16_t a_port, cha dap_worker_t * l_worker = dap_events_worker_get_auto(); dap_events_socket_write_unsafe(l_esocket,l_dns_client->dns_request->data, l_dns_client->dns_request->size ); dap_events_socket_assign_on_worker_mt(l_esocket,l_worker); + + dap_events_socket_handler_t * l_es_handler = DAP_NEW_Z(dap_events_socket_handler_t); + l_es_handler->esocket = l_esocket; + l_es_handler->uuid = l_esocket->uuid; dap_timerfd_start_on_worker(l_worker, dap_config_get_item_uint64_default(g_config,"dns_client","request_timeout",10)*1000, - s_dns_client_esocket_timeout_callback,l_esocket); + s_dns_client_esocket_timeout_callback,l_es_handler); }