Index: dll/win32/msafd/misc/dllmain.c =================================================================== --- dll/win32/msafd/misc/dllmain.c (revision 72748) +++ dll/win32/msafd/misc/dllmain.c (working copy) @@ -890,6 +890,8 @@ if(!NT_SUCCESS(Status)) { + if (lpErrno) + *lpErrno = WSAEFAULT; ERR("NtCreateEvent failed, 0x%08x\n", Status); return SOCKET_ERROR; } @@ -2013,7 +2015,8 @@ switch( dwIoControlCode ) { case FIONBIO: - if( cbInBuffer < sizeof(INT) || IS_INTRESOURCE(lpvInBuffer) ) + *lpcbBytesReturned = sizeof(ULONG); + if (cbOutBuffer < sizeof(ULONG) || IS_INTRESOURCE(lpvOutBuffer)) { *lpErrno = WSAEFAULT; return SOCKET_ERROR; @@ -2026,7 +2029,8 @@ else return NO_ERROR; case FIONREAD: - if( cbOutBuffer < sizeof(INT) || IS_INTRESOURCE(lpvOutBuffer) ) + *lpcbBytesReturned = sizeof(ULONG); + if (cbOutBuffer < sizeof(ULONG) || IS_INTRESOURCE(lpvOutBuffer)) { *lpErrno = WSAEFAULT; return SOCKET_ERROR; @@ -2035,11 +2039,9 @@ if (*lpErrno != NO_ERROR) return SOCKET_ERROR; else - { - *lpcbBytesReturned = sizeof(ULONG); return NO_ERROR; - } case SIOCATMARK: + *lpcbBytesReturned = sizeof(BOOL); if (cbOutBuffer < sizeof(BOOL) || IS_INTRESOURCE(lpvOutBuffer)) { *lpErrno = WSAEFAULT; @@ -2049,12 +2051,25 @@ /* FIXME: Return false for now */ *(BOOL*)lpvOutBuffer = FALSE; - *lpcbBytesReturned = sizeof(BOOL); *lpErrno = NO_ERROR; return NO_ERROR; case SIO_GET_EXTENSION_FUNCTION_POINTER: *lpErrno = WSAEINVAL; return SOCKET_ERROR; + case SIO_ADDRESS_LIST_QUERY: + *lpcbBytesReturned = sizeof(SOCKET_ADDRESS_LIST)+sizeof(Socket->WSLocalAddress); + if (cbOutBuffer < (sizeof(SOCKET_ADDRESS_LIST)+sizeof(Socket->WSLocalAddress)) || IS_INTRESOURCE(lpvOutBuffer)) + { + *lpErrno = WSAEFAULT; + return SOCKET_ERROR; + } + + ((SOCKET_ADDRESS_LIST*)lpvOutBuffer)->iAddressCount = 1; + ((SOCKET_ADDRESS_LIST*)lpvOutBuffer)->Address[0].iSockaddrLength = sizeof(Socket->WSLocalAddress); + ((SOCKET_ADDRESS_LIST*)lpvOutBuffer)->Address[0].lpSockaddr = &Socket->WSLocalAddress; + + *lpErrno = NO_ERROR; + return NO_ERROR; default: *lpErrno = Socket->HelperData->WSHIoctl(Socket->HelperContext, Handle,