]> git.meshlink.io Git - meshlink/commitdiff
Fix socket leak every time meshlink_invite() is called.
authorGuus Sliepen <guus@meshlink.io>
Tue, 20 Nov 2018 14:58:41 +0000 (15:58 +0100)
committerGuus Sliepen <guus@meshlink.io>
Tue, 20 Nov 2018 14:58:57 +0000 (15:58 +0100)
getlocaladdrname() would leak a socket every time it was called, which is
twice for every call to meshlink_invite() using the default flags.

src/meshlink.c

index 8da56922aa5735828f0e598773c613fb3b13d645..1bb403f33d4cbfc7929f29ccb46ede5849a079ff 100644 (file)
@@ -226,6 +226,7 @@ static bool getlocaladdrname(char *destaddr, char *host, socklen_t hostlen) {
        }
 
        if(connect(sock, rai->ai_addr, rai->ai_addrlen) && !sockwouldblock(errno)) {
        }
 
        if(connect(sock, rai->ai_addr, rai->ai_addrlen) && !sockwouldblock(errno)) {
+               closesocket(sock);
                freeaddrinfo(rai);
                return false;
        }
                freeaddrinfo(rai);
                return false;
        }
@@ -236,9 +237,12 @@ static bool getlocaladdrname(char *destaddr, char *host, socklen_t hostlen) {
        socklen_t sl = sizeof(sn);
 
        if(getsockname(sock, (struct sockaddr *)&sn, &sl)) {
        socklen_t sl = sizeof(sn);
 
        if(getsockname(sock, (struct sockaddr *)&sn, &sl)) {
+               closesocket(sock);
                return false;
        }
 
                return false;
        }
 
+       closesocket(sock);
+
        if(getnameinfo((struct sockaddr *)&sn, sl, host, hostlen, NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV)) {
                return false;
        }
        if(getnameinfo((struct sockaddr *)&sn, sl, host, hostlen, NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV)) {
                return false;
        }