Akihiro Sagawa : ws2_32: Explicitly return WSAENOTSOCK for a file handle in getsockopt() except SO_OPENTYPE.
Alexandre Julliard
julliard at winehq.org
Tue Aug 24 15:56:11 CDT 2021
Module: wine
Branch: master
Commit: ffe20add5812fc45267af22aaa2af7d4e9a39d0e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ffe20add5812fc45267af22aaa2af7d4e9a39d0e
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Tue Aug 24 21:50:37 2021 +0900
ws2_32: Explicitly return WSAENOTSOCK for a file handle in getsockopt() except SO_OPENTYPE.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51671
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ws2_32/socket.c | 7 +++++++
dlls/ws2_32/tests/sock.c | 4 ++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 30f233fa78f..f58f7cea5cc 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1363,6 +1363,13 @@ int WINAPI getsockopt( SOCKET s, int level, int optname, char *optval, int *optl
debugstr_sockopt(level, optname), debugstr_optval(optval, 0),
optlen, optlen ? *optlen : 0);
+ if ((level != SOL_SOCKET || optname != SO_OPENTYPE) &&
+ !socket_list_find( s ))
+ {
+ SetLastError( WSAENOTSOCK );
+ return SOCKET_ERROR;
+ }
+
switch(level)
{
case SOL_SOCKET:
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index d3f2459aa3a..ec010acebc6 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -11693,8 +11693,8 @@ static void test_sockopt_validity(void)
};
static const struct sockopt_validity_test file_handle_tests[] =
{
- { -1, WSAENOTSOCK, 0, TRUE },
- { SO_TYPE, WSAENOTSOCK, 0, TRUE },
+ { -1, WSAENOTSOCK },
+ { SO_TYPE, WSAENOTSOCK },
{ SO_OPENTYPE },
{}
};
More information about the wine-cvs
mailing list