Zebediah Figura : ws2_32: Do not accept sizeof(struct WS_sockaddr_in6_old).
Alexandre Julliard
julliard at winehq.org
Fri Jul 23 18:08:01 CDT 2021
Module: wine
Branch: master
Commit: 205e2ae0362aad9b435d00d495feabbb373cf539
URL: https://source.winehq.org/git/wine.git/?a=commit;h=205e2ae0362aad9b435d00d495feabbb373cf539
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Fri Jul 23 11:39:10 2021 -0500
ws2_32: Do not accept sizeof(struct WS_sockaddr_in6_old).
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ws2_32/socket.c | 27 +++++++++++----------------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index b4786e54b38..16bece395b8 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1097,14 +1097,14 @@ unsigned int ws_sockaddr_ws2u( const struct WS_sockaddr *wsaddr, int wsaddrlen,
/* Note: Windows has 2 versions of the sockaddr_in6 struct, one with
* scope_id, one without.
*/
- if (wsaddrlen >= sizeof(struct WS_sockaddr_in6_old)) {
+ if (wsaddrlen >= sizeof(struct WS_sockaddr_in6)) {
uaddrlen = sizeof(struct sockaddr_in6);
memset( uaddr, 0, uaddrlen );
uin6->sin6_family = AF_INET6;
uin6->sin6_port = win6->sin6_port;
uin6->sin6_flowinfo = win6->sin6_flowinfo;
#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
- if (wsaddrlen >= sizeof(struct WS_sockaddr_in6)) uin6->sin6_scope_id = win6->sin6_scope_id;
+ uin6->sin6_scope_id = win6->sin6_scope_id;
#endif
memcpy(&uin6->sin6_addr,&win6->sin6_addr,16); /* 16 bytes = 128 address bits */
break;
@@ -1299,25 +1299,20 @@ int ws_sockaddr_u2ws(const struct sockaddr *uaddr, struct WS_sockaddr *wsaddr, i
#endif
case AF_INET6: {
const struct sockaddr_in6* uin6 = (const struct sockaddr_in6*)uaddr;
- struct WS_sockaddr_in6_old* win6old = (struct WS_sockaddr_in6_old*)wsaddr;
+ struct WS_sockaddr_in6 *win6 = (struct WS_sockaddr_in6 *)wsaddr;
- if (*wsaddrlen < sizeof(struct WS_sockaddr_in6_old))
+ if (*wsaddrlen < sizeof(struct WS_sockaddr_in6))
return -1;
- win6old->sin6_family = WS_AF_INET6;
- win6old->sin6_port = uin6->sin6_port;
- win6old->sin6_flowinfo = uin6->sin6_flowinfo;
- memcpy(&win6old->sin6_addr,&uin6->sin6_addr,16); /* 16 bytes = 128 address bits */
+ win6->sin6_family = WS_AF_INET6;
+ win6->sin6_port = uin6->sin6_port;
+ win6->sin6_flowinfo = uin6->sin6_flowinfo;
+ memcpy(&win6->sin6_addr, &uin6->sin6_addr, 16); /* 16 bytes = 128 address bits */
#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
- if (*wsaddrlen >= sizeof(struct WS_sockaddr_in6)) {
- struct WS_sockaddr_in6* win6 = (struct WS_sockaddr_in6*)wsaddr;
- win6->sin6_scope_id = uin6->sin6_scope_id;
- *wsaddrlen = sizeof(struct WS_sockaddr_in6);
- }
- else
- *wsaddrlen = sizeof(struct WS_sockaddr_in6_old);
+ win6->sin6_scope_id = uin6->sin6_scope_id;
#else
- *wsaddrlen = sizeof(struct WS_sockaddr_in6_old);
+ win6->sin6_scope_id = 0;
#endif
+ *wsaddrlen = sizeof(struct WS_sockaddr_in6);
return 0;
}
case AF_INET: {
More information about the wine-cvs
mailing list