Juan Lang : iphlpapi: Don' t allocate gobs of memory when the TCP entry table is empty.
Alexandre Julliard
julliard at winehq.org
Fri Nov 16 08:31:17 CST 2007
Module: wine
Branch: master
Commit: 5349c5e87b744820531516e3995c4d62f32d139a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5349c5e87b744820531516e3995c4d62f32d139a
Author: Juan Lang <juan.lang at 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");
More information about the wine-cvs
mailing list