diff --git a/dlls/iphlpapi/ifenum.c b/dlls/iphlpapi/ifenum.c
index 9590032..1ae70df 100644
--- a/dlls/iphlpapi/ifenum.c
+++ b/dlls/iphlpapi/ifenum.c
@@ -205,11 +205,13 @@
 
   if (indexes) {
     struct if_nameindex *p;
+    DWORD size = sizeof(InterfaceIndexTable);
 
     for (p = indexes, numInterfaces = 0; p && p->if_name; p++)
       numInterfaces++;
-    ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
-     sizeof(InterfaceIndexTable) + (numInterfaces - 1) * sizeof(DWORD));
+    if (numInterfaces > 1)
+      size += (numInterfaces - 1) * sizeof(DWORD);
+    ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
     if (ret) {
       for (p = indexes; p && p->if_name; p++)
         ret->indexes[ret->numIndexes++] = p->if_index;
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index db14d74..b65276c 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -1015,8 +1015,10 @@
     ret = ERROR_INVALID_PARAMETER;
   else {
     DWORD numInterfaces = getNumInterfaces();
-    ULONG size = sizeof(MIB_IFTABLE) + (numInterfaces - 1) * sizeof(MIB_IFROW);
+    ULONG size = sizeof(MIB_IFTABLE);
 
+    if (numInterfaces > 1)
+      size += (numInterfaces - 1) * sizeof(MIB_IFROW);
     if (!pIfTable || *pdwSize < size) {
       *pdwSize = size;
       ret = ERROR_INSUFFICIENT_BUFFER;
@@ -1025,8 +1027,9 @@
       InterfaceIndexTable *table = getInterfaceIndexTable();
 
       if (table) {
-        size = sizeof(MIB_IFTABLE) + (table->numIndexes - 1) *
-         sizeof(MIB_IFROW);
+        size = sizeof(MIB_IFTABLE);
+        if (table->numIndexes > 1)
+          size += (table->numIndexes - 1) * sizeof(MIB_IFROW);
         if (*pdwSize < size) {
           *pdwSize = size;
           ret = ERROR_INSUFFICIENT_BUFFER;
@@ -1082,9 +1085,10 @@
     ret = ERROR_INVALID_PARAMETER;
   else {
     DWORD numInterfaces = getNumInterfaces();
-    ULONG size = sizeof(IP_INTERFACE_INFO) + (numInterfaces - 1) *
-     sizeof(IP_ADAPTER_INDEX_MAP);
+    ULONG size = sizeof(IP_INTERFACE_INFO);
 
+    if (numInterfaces > 1)
+      size += (numInterfaces - 1) * sizeof(IP_ADAPTER_INDEX_MAP);
     if (!pIfTable || *dwOutBufLen < size) {
       *dwOutBufLen = size;
       ret = ERROR_INSUFFICIENT_BUFFER;
@@ -1093,8 +1097,9 @@
       InterfaceIndexTable *table = getInterfaceIndexTable();
 
       if (table) {
-        size = sizeof(IP_INTERFACE_INFO) + (table->numIndexes - 1) *
-         sizeof(IP_ADAPTER_INDEX_MAP);
+        size = sizeof(IP_INTERFACE_INFO);
+        if (table->numIndexes > 1)
+          size += (table->numIndexes - 1) * sizeof(IP_ADAPTER_INDEX_MAP);
         if (*dwOutBufLen < size) {
           *dwOutBufLen = size;
           ret = ERROR_INSUFFICIENT_BUFFER;
