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

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


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

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




More information about the wine-cvs mailing list