mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 18:07:21 +00:00
ws2_32: Handle null pointer for linger values.
This commit is contained in:
parent
8db18a893b
commit
dc16a01fdf
|
@ -4026,6 +4026,11 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
|
|||
* setsockopt follow below that.*/
|
||||
|
||||
case WS_SO_DONTLINGER:
|
||||
if (!optval)
|
||||
{
|
||||
SetLastError(WSAEFAULT);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
linger.l_onoff = *((const int*)optval) ? 0: 1;
|
||||
linger.l_linger = 0;
|
||||
level = SOL_SOCKET;
|
||||
|
@ -4035,10 +4040,13 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
|
|||
break;
|
||||
|
||||
case WS_SO_LINGER:
|
||||
if (!optval)
|
||||
{
|
||||
SetLastError(WSAEFAULT);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
linger.l_onoff = ((LINGER*)optval)->l_onoff;
|
||||
linger.l_linger = ((LINGER*)optval)->l_linger;
|
||||
/* FIXME: what is documented behavior if SO_LINGER optval
|
||||
is null?? */
|
||||
level = SOL_SOCKET;
|
||||
optname = SO_LINGER;
|
||||
optval = (char*)&linger;
|
||||
|
|
|
@ -1139,6 +1139,23 @@ static void test_set_getsockopt(void)
|
|||
lingval.l_onoff, lingval.l_linger,
|
||||
linger_testvals[i].l_onoff, linger_testvals[i].l_linger);
|
||||
}
|
||||
|
||||
size = sizeof(lingval);
|
||||
err = setsockopt(s, SOL_SOCKET, SO_LINGER, NULL, size);
|
||||
ok(err == SOCKET_ERROR && WSAGetLastError() == WSAEFAULT,
|
||||
"got %d with %d (expected SOCKET_ERROR with WSAEFAULT)\n", err, WSAGetLastError());
|
||||
err = setsockopt(s, SOL_SOCKET, SO_LINGER, NULL, 0);
|
||||
ok(err == SOCKET_ERROR && WSAGetLastError() == WSAEFAULT,
|
||||
"got %d with %d (expected SOCKET_ERROR with WSAEFAULT)\n", err, WSAGetLastError());
|
||||
|
||||
size = sizeof(BOOL);
|
||||
err = setsockopt(s, SOL_SOCKET, SO_DONTLINGER, NULL, size);
|
||||
ok(err == SOCKET_ERROR && WSAGetLastError() == WSAEFAULT,
|
||||
"got %d with %d (expected SOCKET_ERROR with WSAEFAULT)\n", err, WSAGetLastError());
|
||||
err = setsockopt(s, SOL_SOCKET, SO_DONTLINGER, NULL, 0);
|
||||
ok(err == SOCKET_ERROR && WSAGetLastError() == WSAEFAULT,
|
||||
"got %d with %d (expected SOCKET_ERROR with WSAEFAULT)\n", err, WSAGetLastError());
|
||||
|
||||
/* Test for erroneously passing a value instead of a pointer as optval */
|
||||
size = sizeof(char);
|
||||
err = setsockopt(s, SOL_SOCKET, SO_DONTROUTE, (char *)1, size);
|
||||
|
|
Loading…
Reference in a new issue