[IPHLPAPI]

- Don't use uninitialized values in AllocateAndGet*TableFromStack functions. CID 716757
- Free buffers on failure
CORE-11227 #resolve

svn path=/trunk/; revision=71308
This commit is contained in:
Thomas Faber 2016-05-10 17:53:36 +00:00
parent ba1fac2999
commit bc4d7ba184

View file

@ -117,10 +117,15 @@ DWORD WINAPI AllocateAndGetIfTableFromStack(PMIB_IFTABLE *ppIfTable,
else {
DWORD dwSize = 0;
*ppIfTable = NULL;
ret = GetIfTable(*ppIfTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppIfTable = (PMIB_IFTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetIfTable(*ppIfTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppIfTable);
*ppIfTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);
@ -156,10 +161,15 @@ DWORD WINAPI AllocateAndGetIpAddrTableFromStack(PMIB_IPADDRTABLE *ppIpAddrTable,
else {
DWORD dwSize = 0;
*ppIpAddrTable = NULL;
ret = GetIpAddrTable(*ppIpAddrTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppIpAddrTable = (PMIB_IPADDRTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetIpAddrTable(*ppIpAddrTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppIpAddrTable);
*ppIpAddrTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);
@ -193,10 +203,15 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *
else {
DWORD dwSize = 0;
*ppIpForwardTable = NULL;
ret = GetIpForwardTable(*ppIpForwardTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppIpForwardTable = (PMIB_IPFORWARDTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetIpForwardTable(*ppIpForwardTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppIpForwardTable);
*ppIpForwardTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);
@ -232,10 +247,15 @@ DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable,
else {
DWORD dwSize = 0;
*ppIpNetTable = NULL;
ret = GetIpNetTable(*ppIpNetTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppIpNetTable = (PMIB_IPNETTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetIpNetTable(*ppIpNetTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppIpNetTable);
*ppIpNetTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);
@ -271,10 +291,15 @@ DWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable,
else {
DWORD dwSize = 0;
*ppTcpTable = NULL;
ret = GetTcpTable(*ppTcpTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppTcpTable = (PMIB_TCPTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetTcpTable(*ppTcpTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppTcpTable);
*ppTcpTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);
@ -310,10 +335,15 @@ DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable,
else {
DWORD dwSize = 0;
*ppUdpTable = NULL;
ret = GetUdpTable(*ppUdpTable, &dwSize, bOrder);
if (ret == ERROR_INSUFFICIENT_BUFFER) {
*ppUdpTable = (PMIB_UDPTABLE)HeapAlloc(heap, flags, dwSize);
ret = GetUdpTable(*ppUdpTable, &dwSize, bOrder);
if (ret != NO_ERROR) {
HeapFree(heap, flags, *ppUdpTable);
*ppUdpTable = NULL;
}
}
}
TRACE("returning %ld\n", ret);