Index: dll/win32/msafd/misc/sndrcv.c =================================================================== --- dll/win32/msafd/misc/sndrcv.c (revision 72966) +++ dll/win32/msafd/misc/sndrcv.c (working copy) @@ -208,9 +208,16 @@ Socket = GetSocketStructure(Handle); if (!Socket) { - *lpErrno = WSAENOTSOCK; - return SOCKET_ERROR; + if (lpErrno) + *lpErrno = WSAENOTSOCK; + return SOCKET_ERROR; } + if (!lpNumberOfBytesRead && !lpOverlapped) + { + if (lpErrno) + *lpErrno = WSAEFAULT; + return SOCKET_ERROR; + } Status = NtCreateEvent( &SockEvent, EVENT_ALL_ACCESS, NULL, 1, FALSE ); @@ -389,9 +396,16 @@ Socket = GetSocketStructure(Handle); if (!Socket) { - *lpErrno = WSAENOTSOCK; - return SOCKET_ERROR; + if (lpErrno) + *lpErrno = WSAENOTSOCK; + return SOCKET_ERROR; } + if (!lpNumberOfBytesRead && !lpOverlapped) + { + if (lpErrno) + *lpErrno = WSAEFAULT; + return SOCKET_ERROR; + } if (!(Socket->SharedData->ServiceFlags1 & XP1_CONNECTIONLESS)) { @@ -591,9 +605,16 @@ Socket = GetSocketStructure(Handle); if (!Socket) { - *lpErrno = WSAENOTSOCK; - return SOCKET_ERROR; + if (lpErrno) + *lpErrno = WSAENOTSOCK; + return SOCKET_ERROR; } + if (!lpNumberOfBytesSent && !lpOverlapped) + { + if (lpErrno) + *lpErrno = WSAEFAULT; + return SOCKET_ERROR; + } Status = NtCreateEvent( &SockEvent, EVENT_ALL_ACCESS, NULL, 1, FALSE ); @@ -740,9 +761,16 @@ Socket = GetSocketStructure(Handle); if (!Socket) { - *lpErrno = WSAENOTSOCK; - return SOCKET_ERROR; + if (lpErrno) + *lpErrno = WSAENOTSOCK; + return SOCKET_ERROR; } + if (!lpNumberOfBytesSent && !lpOverlapped) + { + if (lpErrno) + *lpErrno = WSAEFAULT; + return SOCKET_ERROR; + } if (!(Socket->SharedData->ServiceFlags1 & XP1_CONNECTIONLESS)) {