Module: wine Branch: master Commit: 848e8de5a72135fa15a531d0f7cfefb76dd7f010 URL: http://source.winehq.org/git/wine.git/?a=commit;h=848e8de5a72135fa15a531d0f7...
Author: Juan Lang juan.lang@gmail.com Date: Thu Nov 15 11:02:22 2007 -0800
iphlpapi: Don't allocate gobs of memory when the route table is empty.
---
dlls/iphlpapi/iphlpapi_main.c | 10 ++++++---- dlls/iphlpapi/ipstats.c | 7 +++++-- 2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index e3898c2..9ba742b 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -1222,9 +1222,10 @@ DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSi ret = ERROR_INVALID_PARAMETER; else { DWORD numRoutes = getNumRoutes(); - ULONG sizeNeeded = sizeof(MIB_IPFORWARDTABLE) + (numRoutes - 1) * - sizeof(MIB_IPFORWARDROW); + ULONG sizeNeeded = sizeof(MIB_IPFORWARDTABLE);
+ if (numRoutes > 1) + sizeNeeded += (numRoutes - 1) * sizeof(MIB_IPFORWARDROW); if (!pIpForwardTable || *pdwSize < sizeNeeded) { *pdwSize = sizeNeeded; ret = ERROR_INSUFFICIENT_BUFFER; @@ -1234,8 +1235,9 @@ DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSi
ret = getRouteTable(&table, GetProcessHeap(), 0); if (!ret) { - sizeNeeded = sizeof(MIB_IPFORWARDTABLE) + (table->dwNumEntries - 1) * - sizeof(MIB_IPFORWARDROW); + sizeNeeded = sizeof(MIB_IPFORWARDTABLE); + if (table->dwNumEntries > 1) + sizeNeeded += (table->dwNumEntries - 1) * sizeof(MIB_IPFORWARDROW); if (*pdwSize < sizeNeeded) { *pdwSize = sizeNeeded; ret = ERROR_INSUFFICIENT_BUFFER; diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 6642804..b17b0da 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -777,9 +777,12 @@ DWORD getRouteTable(PMIB_IPFORWARDTABLE *ppIpForwardTable, HANDLE heap, ret = ERROR_INVALID_PARAMETER; else { DWORD numRoutes = getNumRoutes(); - PMIB_IPFORWARDTABLE table = HeapAlloc(heap, flags, - sizeof(MIB_IPFORWARDTABLE) + (numRoutes - 1) * sizeof(MIB_IPFORWARDROW)); + DWORD size = sizeof(MIB_IPFORWARDTABLE); + PMIB_IPFORWARDTABLE table;
+ if (numRoutes > 1) + size += (numRoutes - 1) * sizeof(MIB_IPFORWARDROW); + table = HeapAlloc(heap, flags, size); if (table) { #if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP) int mib[6] = {CTL_NET, PF_ROUTE, 0, PF_INET, NET_RT_DUMP, 0};