]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - lhnet.c
fix an addrinfo leak when getaddrinfo returns an addrinfo that is not
[xonotic/darkplaces.git] / lhnet.c
diff --git a/lhnet.c b/lhnet.c
index fd668b7ee6d83ac59c55bdb8d4f3e1838dd5de60..dfb0005071f9f0dccfe2ed88f48ca8f9eda30787 100644 (file)
--- a/lhnet.c
+++ b/lhnet.c
@@ -1,6 +1,14 @@
 
 // Written by Forest Hale 2003-06-15 and placed into public domain.
 
+#ifdef WIN32
+// Windows XP or higher is required for getaddrinfo, but the inclusion of wspiapi provides fallbacks for older versions
+#define _WIN32_WINNT 0x0501
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <wspiapi.h>
+#endif
+
 #ifndef STANDALONETEST
 #include "quakedef.h"
 #endif
@@ -9,12 +17,7 @@
 #include <stdio.h>
 #include <time.h>
 #include <string.h>
-#ifdef WIN32
-#define _WIN32_WINNT 0x0501
-       // Windows XP or higher is required for getaddrinfo
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
+#ifndef WIN32
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -148,7 +151,10 @@ int LHNETADDRESS_Resolve(lhnetaddressnative_t *address, const char *name, int po
        if (err != 0 || addrinf == NULL)
                return 0;
        if (addrinf->ai_addr->sa_family != AF_INET6 && addrinf->ai_addr->sa_family != AF_INET)
+       {
+               freeaddrinfo (addrinf);
                return 0;
+       }
 
        // great it worked
        if (addrinf->ai_addr->sa_family == AF_INET6)