ws2_32: Handle Nullpointer for linger values
André Hentschel
nerv at dawncrow.de
Sun May 29 07:38:29 CDT 2011
---
dlls/ws2_32/socket.c | 12 ++++++++++--
dlls/ws2_32/tests/sock.c | 8 ++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 40151f1..080dbb4 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -4025,6 +4025,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;
@@ -4034,10 +4039,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;
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index d1ac3c4..7854aec 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -1139,6 +1139,14 @@ 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());
+ 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());
/* 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);
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list