summaryrefslogtreecommitdiff
path: root/pjlib
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2010-03-27 03:08:08 +0000
committerBenny Prijono <bennylp@teluu.com>2010-03-27 03:08:08 +0000
commit7511ee1a7b7d27c3505bab14347e281b94af8277 (patch)
tree72cd8bacb50fcfa33011a75eead00a5739506043 /pjlib
parentfc5e0485cc64213faadb735e8d76cea715192689 (diff)
Fixed ticket #1048: Memory leak in enum_ipv4_ipv6_interface (ip_helper_win32.c) (thanks Andrey Mamchur for the report)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3123 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib')
-rw-r--r--pjlib/src/pj/ip_helper_win32.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/pjlib/src/pj/ip_helper_win32.c b/pjlib/src/pj/ip_helper_win32.c
index 8ae28226..ed55c981 100644
--- a/pjlib/src/pj/ip_helper_win32.c
+++ b/pjlib/src/pj/ip_helper_win32.c
@@ -274,6 +274,7 @@ static pj_status_t enum_ipv4_ipv6_interface(int af,
{
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 @@ static pj_status_t enum_ipv4_ipv6_interface(int af,
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 @@ static pj_status_t enum_ipv4_ipv6_interface(int af,
}
}
- if (adapter != (IP_ADAPTER_ADDRESSES*)buffer)
- free(adapter);
+ if (adapterBuf)
+ free(adapterBuf);
*p_cnt = i;
return (*p_cnt) ? PJ_SUCCESS : PJ_ENOTFOUND;