Juan Lang : iphlpapi: Don' t allocate gobs of memory when the route table is empty.

Alexandre Julliard julliard at winehq.org
Fri Nov 16 08:31:17 CST 2007


Module: wine
Branch: master
Commit: 848e8de5a72135fa15a531d0f7cfefb76dd7f010
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=848e8de5a72135fa15a531d0f7cfefb76dd7f010

Author: Juan Lang <juan.lang at 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};




More information about the wine-cvs mailing list