Commit 44c64aef authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

wsock32: Correctly handle the case where a table size is 0 in IP_MIB_TABLE_ENTRY_ID.

Spotted by Gerald Pfeifer.
parent fdc607d0
...@@ -442,8 +442,12 @@ DWORD WINAPI WsControl(DWORD protocol, ...@@ -442,8 +442,12 @@ DWORD WINAPI WsControl(DWORD protocol,
if (!pcbResponseInfoLen) if (!pcbResponseInfoLen)
return ERROR_BAD_ENVIRONMENT; return ERROR_BAD_ENVIRONMENT;
GetIpForwardTable(NULL, &routeTableSize, FALSE); GetIpForwardTable(NULL, &routeTableSize, FALSE);
numRoutes = min(routeTableSize - sizeof(MIB_IPFORWARDTABLE), if (!routeTableSize) {
0) / sizeof(MIB_IPFORWARDROW) + 1; *pcbResponseInfoLen = 0;
return WSCTL_SUCCESS;
}
numRoutes = (routeTableSize - sizeof(MIB_IPFORWARDTABLE))
/ sizeof(MIB_IPFORWARDROW) + 1;
if (*pcbResponseInfoLen < sizeof(IPRouteEntry) * numRoutes) if (*pcbResponseInfoLen < sizeof(IPRouteEntry) * numRoutes)
return (ERROR_LOCK_VIOLATION); return (ERROR_LOCK_VIOLATION);
table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, routeTableSize ); table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, routeTableSize );
...@@ -491,8 +495,12 @@ DWORD WINAPI WsControl(DWORD protocol, ...@@ -491,8 +495,12 @@ DWORD WINAPI WsControl(DWORD protocol,
if (!pcbResponseInfoLen) if (!pcbResponseInfoLen)
return ERROR_BAD_ENVIRONMENT; return ERROR_BAD_ENVIRONMENT;
GetIpNetTable(NULL, &arpTableSize, FALSE); GetIpNetTable(NULL, &arpTableSize, FALSE);
numEntries = min(arpTableSize - sizeof(MIB_IPNETTABLE), if (!arpTableSize) {
0) / sizeof(MIB_IPNETROW) + 1; *pcbResponseInfoLen = 0;
return WSCTL_SUCCESS;
}
numEntries = (arpTableSize - sizeof(MIB_IPNETTABLE))
/ sizeof(MIB_IPNETROW) + 1;
if (*pcbResponseInfoLen < sizeof(MIB_IPNETROW) * numEntries) if (*pcbResponseInfoLen < sizeof(MIB_IPNETROW) * numEntries)
return (ERROR_LOCK_VIOLATION); return (ERROR_LOCK_VIOLATION);
table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, arpTableSize ); table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, arpTableSize );
...@@ -529,8 +537,12 @@ DWORD WINAPI WsControl(DWORD protocol, ...@@ -529,8 +537,12 @@ DWORD WINAPI WsControl(DWORD protocol,
if (!pcbResponseInfoLen) if (!pcbResponseInfoLen)
return ERROR_BAD_ENVIRONMENT; return ERROR_BAD_ENVIRONMENT;
GetTcpTable(NULL, &tcpTableSize, FALSE); GetTcpTable(NULL, &tcpTableSize, FALSE);
numEntries = min(tcpTableSize - sizeof(MIB_TCPTABLE), if (!tcpTableSize) {
0) / sizeof(MIB_TCPROW) + 1; *pcbResponseInfoLen = 0;
return WSCTL_SUCCESS;
}
numEntries = (tcpTableSize - sizeof(MIB_TCPTABLE))
/ sizeof(MIB_TCPROW) + 1;
if (*pcbResponseInfoLen < sizeof(MIB_TCPROW) * numEntries) if (*pcbResponseInfoLen < sizeof(MIB_TCPROW) * numEntries)
return (ERROR_LOCK_VIOLATION); return (ERROR_LOCK_VIOLATION);
table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, tcpTableSize ); table = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, tcpTableSize );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment