Author: gedmurphy Date: Thu Aug 17 20:44:54 2006 New Revision: 23595
URL: http://svn.reactos.org/svn/reactos?rev=23595&view=rev Log: Don't allow ws2_32 access to apps with bad setup data
Modified: trunk/reactos/dll/win32/ws2_32/misc/dllmain.c
Modified: trunk/reactos/dll/win32/ws2_32/misc/dllmain.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/ws2_32/misc/dllma... ============================================================================== --- trunk/reactos/dll/win32/ws2_32/misc/dllmain.c (original) +++ trunk/reactos/dll/win32/ws2_32/misc/dllmain.c Thu Aug 17 20:44:54 2006 @@ -76,15 +76,61 @@ WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData) { + BYTE Low, High; + WS_DbgPrint(MAX_TRACE, ("WSAStartup of ws2_32.dll\n"));
+ if (!g_hInstDll) + return WSASYSNOTREADY; + + if (lpWSAData == NULL) + return WSAEFAULT; + + Low = LOWBYTE(wVersionRequested); + High = HIGHBYTE(wVersionRequested); + + if (Low < 1) + { + WS_DbgPrint(MAX_TRACE, ("Bad winsock version requested, %d,%d", Low, High)); + return WSAVERNOTSUPPORTED; + } + + if (Low == 1) + { + if (High == 0) + { + lpWSAData->wVersion = wVersionRequested; + } + else + { + lpWSAData->wVersion = MAKEWORD(1, 1); + } + } + else if (Low == 2) + { + if (High <= 2) + { + lpWSAData->wVersion = MAKEWORD(2, High); + } + else + { + lpWSAData->wVersion = MAKEWORD(2, 2); + } + } + else + { + lpWSAData->wVersion = MAKEWORD(2, 2); + } + lpWSAData->wVersion = wVersionRequested; - lpWSAData->wHighVersion = 2; - lstrcpyA(lpWSAData->szDescription, "WinSock 2.0"); + lpWSAData->wHighVersion = MAKEWORD(2,2); + lstrcpyA(lpWSAData->szDescription, "WinSock 2.2"); lstrcpyA(lpWSAData->szSystemStatus, "Running"); lpWSAData->iMaxSockets = 0; lpWSAData->iMaxUdpDg = 0; lpWSAData->lpVendorInfo = NULL; + + /*FIXME: increment internal counter */
WSASETINITIALIZED;