From b2b645b014257afed28c578c5ad06feb013a4172 Mon Sep 17 00:00:00 2001 From: Peter Hater <7element@mail.bg> Date: Fri, 26 May 2017 10:32:01 +0000 Subject: [PATCH] [MSAFD] Add some parameters check for WSPBind. Inspired by results of bind test svn path=/trunk/; revision=74668 --- reactos/dll/win32/msafd/misc/dllmain.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index 2531bdf8d17..7bd45bf8ee2 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -860,6 +860,27 @@ WSPBind(SOCKET Handle, if (lpErrno) *lpErrno = WSAENOTSOCK; return SOCKET_ERROR; } + if (Socket->SharedData->State != SocketOpen) + { + if (lpErrno) *lpErrno = WSAEINVAL; + return SOCKET_ERROR; + } + if (!SocketAddress || SocketAddressLength < Socket->SharedData->SizeOfLocalAddress) + { + if (lpErrno) *lpErrno = WSAEINVAL; + return SOCKET_ERROR; + } + + /* Get Address Information */ + Socket->HelperData->WSHGetSockaddrType ((PSOCKADDR)SocketAddress, + SocketAddressLength, + &SocketInfo); + + if (SocketInfo.AddressInfo == SockaddrAddressInfoBroadcast && !Socket->SharedData->Broadcast) + { + if (lpErrno) *lpErrno = WSAEADDRNOTAVAIL; + return SOCKET_ERROR; + } Status = NtCreateEvent(&SockEvent, EVENT_ALL_ACCESS, @@ -887,11 +908,6 @@ WSPBind(SOCKET Handle, SocketAddress->sa_data, SocketAddressLength - sizeof(SocketAddress->sa_family)); - /* Get Address Information */ - Socket->HelperData->WSHGetSockaddrType ((PSOCKADDR)SocketAddress, - SocketAddressLength, - &SocketInfo); - /* Set the Share Type */ if (Socket->SharedData->ExclusiveAddressUse) {