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;