Module: wine Branch: master Commit: 7e584b4340c0a6c1224ce8be9d51c77da1cc1790 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e584b4340c0a6c1224ce8be9d...
Author: Juan Lang juan.lang@gmail.com Date: Thu Nov 15 11:04:12 2007 -0800
iphlpapi: Don't allocate gobs of memory if the UDP table is empty.
---
dlls/iphlpapi/iphlpapi_main.c | 9 ++++++--- dlls/iphlpapi/ipstats.c | 7 +++++-- 2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index 92df631..db14d74 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -1665,8 +1665,10 @@ DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder) ret = ERROR_INVALID_PARAMETER; else { DWORD numEntries = getNumUdpEntries(); - DWORD size = sizeof(MIB_UDPTABLE) + (numEntries - 1) * sizeof(MIB_UDPROW); + DWORD size = sizeof(MIB_UDPTABLE);
+ if (numEntries > 1) + size += (numEntries - 1) * sizeof(MIB_UDPROW); if (!pUdpTable || *pdwSize < size) { *pdwSize = size; ret = ERROR_INSUFFICIENT_BUFFER; @@ -1676,8 +1678,9 @@ DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder)
ret = getUdpTable(&table, GetProcessHeap(), 0); if (!ret) { - size = sizeof(MIB_UDPTABLE) + (table->dwNumEntries - 1) * - sizeof(MIB_UDPROW); + size = sizeof(MIB_UDPTABLE); + if (table->dwNumEntries > 1) + size += (table->dwNumEntries - 1) * sizeof(MIB_UDPROW); if (*pdwSize < size) { *pdwSize = size; ret = ERROR_INSUFFICIENT_BUFFER; diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 3605d64..a7fd40d 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -1112,9 +1112,12 @@ DWORD getUdpTable(PMIB_UDPTABLE *ppUdpTable, HANDLE heap, DWORD flags) ret = ERROR_INVALID_PARAMETER; else { DWORD numEntries = getNumUdpEntries(); - PMIB_UDPTABLE table = HeapAlloc(heap, flags, - sizeof(MIB_UDPTABLE) + (numEntries - 1) * sizeof(MIB_UDPROW)); + DWORD size = sizeof(MIB_UDPTABLE); + PMIB_UDPTABLE table;
+ if (numEntries > 1) + size += (numEntries - 1) * sizeof(MIB_UDPROW); + table = HeapAlloc(heap, flags, size); if (table) { FILE *fp;