Module: wine Branch: master Commit: 5349c5e87b744820531516e3995c4d62f32d139a URL: http://source.winehq.org/git/wine.git/?a=commit;h=5349c5e87b744820531516e399...
Author: Juan Lang juan.lang@gmail.com Date: Thu Nov 15 11:01:13 2007 -0800
iphlpapi: Don't allocate gobs of memory when the TCP entry table is empty.
---
dlls/iphlpapi/iphlpapi_main.c | 9 ++++++--- dlls/iphlpapi/ipstats.c | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index 55a6fa7..e3898c2 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -1579,8 +1579,10 @@ DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder) ret = ERROR_INVALID_PARAMETER; else { DWORD numEntries = getNumTcpEntries(); - DWORD size = sizeof(MIB_TCPTABLE) + (numEntries - 1) * sizeof(MIB_TCPROW); + DWORD size = sizeof(MIB_TCPTABLE);
+ if (numEntries > 1) + size += (numEntries - 1) * sizeof(MIB_TCPROW); if (!pTcpTable || *pdwSize < size) { *pdwSize = size; ret = ERROR_INSUFFICIENT_BUFFER; @@ -1588,8 +1590,9 @@ DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder) else { ret = getTcpTable(&pTcpTable, numEntries, 0, 0); if (!ret) { - size = sizeof(MIB_TCPTABLE) + (pTcpTable->dwNumEntries - 1) * - sizeof(MIB_TCPROW); + size = sizeof(MIB_TCPTABLE); + if (numEntries > 1) + size += (numEntries - 1) * sizeof(MIB_TCPROW); *pdwSize = size;
if (bOrder) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 1ba57b1..6642804 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -1212,9 +1212,11 @@ DWORD getTcpTable(PMIB_TCPTABLE *ppTcpTable, DWORD maxEntries, HANDLE heap,
if (!*ppTcpTable) { - *ppTcpTable = HeapAlloc (heap, flags, - sizeof (MIB_TCPTABLE) + - (numEntries - 1) * sizeof (MIB_TCPROW)); + DWORD size = sizeof(MIB_TCPTABLE); + + if (numEntries > 1) + size += (numEntries - 1) * sizeof (MIB_TCPROW); + *ppTcpTable = HeapAlloc (heap, flags, size); if (!*ppTcpTable) { ERR ("Out of memory!\n");