From d992d0c0493256cc4372fecbdd5efbacf800843a Mon Sep 17 00:00:00 2001 From: Gregor Jasny Date: Thu, 27 Oct 2022 23:07:21 +0200 Subject: [PATCH] Fix resource leaks (#1048) --- src/apps/oauth/oauth.c | 3 +++ src/apps/peer/udpserver.c | 1 + src/apps/relay/dbdrivers/dbd_mysql.c | 1 + src/apps/uclient/startuclient.c | 6 +++++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/apps/oauth/oauth.c b/src/apps/oauth/oauth.c index 700532ee..7eb368bf 100644 --- a/src/apps/oauth/oauth.c +++ b/src/apps/oauth/oauth.c @@ -125,6 +125,7 @@ static int encode_token(const char* server_name, size_t base64encoded_etoken_length; const char *tmp=base64_encode((unsigned char *)(etoken.token), etoken.size, &base64encoded_etoken_length); STRCPY(base64encoded_etoken,tmp); + free(tmp); return 0; } @@ -142,6 +143,7 @@ static int validate_decode_token(const char* server_name, const size_t base64encoded_etoken_length=strlen(base64encoded_etoken); const unsigned char *tmp = base64_decode(base64encoded_etoken,base64encoded_etoken_length,&etoken.size); memcpy(etoken.token,tmp,etoken.size); + free(tmp); if (decode_oauth_token((const uint8_t *) server_name, &etoken, &key, dot) < 0) { fprintf(stderr, "%s: cannot decode oauth token\n", @@ -160,6 +162,7 @@ static void print_token_body(oauth_token* dot) { const char *base64encoded_nonce = base64_encode((unsigned char *)dot->enc_block.nonce, dot->enc_block.nonce_length,&base64encoded_nonce_length); printf(" nonce: %s\n", base64encoded_nonce); printf(" nonce length: %d\n", (int) dot->enc_block.nonce_length); + free(base64encoded_nonce); printf("Token encrpyted body:\n"); printf("{\n"); printf(" mac key: %s\n", (char*) dot->enc_block.mac_key); diff --git a/src/apps/peer/udpserver.c b/src/apps/peer/udpserver.c index 919c64d6..3ac34d25 100644 --- a/src/apps/peer/udpserver.c +++ b/src/apps/peer/udpserver.c @@ -77,6 +77,7 @@ static int udp_create_server_socket(server_type* server, udp_fd = socket(server_addr->ss.sa_family, RELAY_DGRAM_SOCKET_TYPE, RELAY_DGRAM_SOCKET_PROTOCOL); if (udp_fd < 0) { perror("socket"); + free(server_addr); return -1; } diff --git a/src/apps/relay/dbdrivers/dbd_mysql.c b/src/apps/relay/dbdrivers/dbd_mysql.c index 5ee5421a..8e0e4baa 100644 --- a/src/apps/relay/dbdrivers/dbd_mysql.c +++ b/src/apps/relay/dbdrivers/dbd_mysql.c @@ -71,6 +71,7 @@ static void MyconninfoFree(Myconninfo *co) { if(co->capath) free(co->capath); if(co->cipher) free(co->cipher); memset(co,0,sizeof(Myconninfo)); + free(co); } } diff --git a/src/apps/uclient/startuclient.c b/src/apps/uclient/startuclient.c index c58ec204..1ed6663d 100644 --- a/src/apps/uclient/startuclient.c +++ b/src/apps/uclient/startuclient.c @@ -255,10 +255,12 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address, if(remote_addr.ss.sa_family == AF_INET6) { if (make_ioa_addr((const uint8_t*) "::1", 0, &local_addr) < 0) { + socket_closesocket(clnet_fd); return -1; } } else { if (make_ioa_addr((const uint8_t*) "127.0.0.1", 0, &local_addr) < 0) { + socket_closesocket(clnet_fd); return -1; } } @@ -268,8 +270,10 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address, } else if (strlen(local_address) > 0) { if (make_ioa_addr((const uint8_t*) local_address, 0, - &local_addr) < 0) + &local_addr) < 0) { + socket_closesocket(clnet_fd); return -1; + } addr_bind(clnet_fd, &local_addr,0,1,get_socket_type()); }