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 {