From 39544b234bd1996d53a43fc6175a7b5b46ad9bb5 Mon Sep 17 00:00:00 2001 From: Peter Hater <7element@mail.bg> Date: Mon, 17 Oct 2016 15:24:43 +0000 Subject: [PATCH 1/1] [MSAFD] Add some parameter checks on send/recv based on wine tests. CORE-12104 svn path=/trunk/; revision=72978 --- reactos/dll/win32/msafd/misc/sndrcv.c | 44 ++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/msafd/misc/sndrcv.c b/reactos/dll/win32/msafd/misc/sndrcv.c index 9d5adb79e6b..e94ab2bb357 100644 --- a/reactos/dll/win32/msafd/misc/sndrcv.c +++ b/reactos/dll/win32/msafd/misc/sndrcv.c @@ -208,8 +208,15 @@ WSPRecv(SOCKET Handle, 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, @@ -389,8 +396,15 @@ WSPRecvFrom(SOCKET Handle, 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,8 +605,15 @@ WSPSend(SOCKET Handle, 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, @@ -740,8 +761,15 @@ WSPSendTo(SOCKET Handle, 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)) -- 2.17.1