Fixed sockfd/socketBio resource leak.
authorArmin Novak <armin.novak@thincast.com>
Thu, 25 Oct 2018 11:13:14 +0000 (13:13 +0200)
committerArmin Novak <armin.novak@thincast.com>
Thu, 25 Oct 2018 11:38:31 +0000 (13:38 +0200)
libfreerdp/core/gateway/rpc.c

index 81db7c2..08813b2 100644 (file)
@@ -671,24 +671,36 @@ static BOOL rpc_channel_tls_connect(RpcChannel* channel, int timeout)
        socketBio = BIO_new(BIO_s_simple_socket());
 
        if (!socketBio)
+       {
+               close(sockfd);
                return FALSE;
+       }
 
        BIO_set_fd(socketBio, sockfd, BIO_CLOSE);
        bufferedBio = BIO_new(BIO_s_buffered_socket());
 
        if (!bufferedBio)
+       {
+               BIO_free_all(socketBio);
                return FALSE;
+       }
 
        bufferedBio = BIO_push(bufferedBio, socketBio);
 
        if (!BIO_set_nonblock(bufferedBio, TRUE))
+       {
+               BIO_free_all(bufferedBio);
                return FALSE;
+       }
 
        if (channel->client->isProxy)
        {
                if (!proxy_connect(settings, bufferedBio, proxyUsername, proxyPassword, settings->GatewayHostname,
                                   settings->GatewayPort))
+               {
+                       BIO_free_all(bufferedBio);
                        return FALSE;
+               }
        }
 
        channel->bio = bufferedBio;