Fixed ticket #1048: Memory leak in enum_ipv4_ipv6_interface (ip_helper_win32.c) (thanks Andrey Mamchur for the report)


git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@3123 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/src/pj/ip_helper_win32.c b/pjlib/src/pj/ip_helper_win32.c
index 8ae2822..ed55c98 100644
--- a/pjlib/src/pj/ip_helper_win32.c
+++ b/pjlib/src/pj/ip_helper_win32.c
@@ -274,6 +274,7 @@
 {
     pj_uint8_t buffer[600];
     IP_ADAPTER_ADDRESSES *adapter = (IP_ADAPTER_ADDRESSES*)buffer;
+    void *adapterBuf = NULL;
     ULONG size = sizeof(buffer);
     ULONG flags;
     unsigned i;
@@ -287,14 +288,15 @@
     if (rc != ERROR_SUCCESS) {
 	if (rc == ERROR_BUFFER_OVERFLOW) {
 	    /* Retry with larger memory size */
-	    adapter = (IP_ADAPTER_ADDRESSES*) malloc(size);
+	    adapterBuf = malloc(size);
+	    adapter = (IP_ADAPTER_ADDRESSES*) adapterBuf;
 	    if (adapter != NULL)
 		rc = MyGetAdapterAddresses(af, flags, NULL, adapter, &size);
 	} 
 
 	if (rc != ERROR_SUCCESS) {
-	    if (adapter != (IP_ADAPTER_ADDRESSES*)buffer)
-		free(adapter);
+	    if (adapterBuf)
+		free(adapterBuf);
 	    return PJ_RETURN_OS_ERROR(rc);
 	}
     }
@@ -350,8 +352,8 @@
 	}
     }
 
-    if (adapter != (IP_ADAPTER_ADDRESSES*)buffer)
-	free(adapter);
+    if (adapterBuf)
+	free(adapterBuf);
 
     *p_cnt = i;
     return (*p_cnt) ? PJ_SUCCESS : PJ_ENOTFOUND;