Zebediah Figura : server: Pass the correct size to sockaddr_from_unix() (Valgrind).

Alexandre Julliard julliard at winehq.org
Sat Jan 2 14:01:23 CST 2021


Module: wine
Branch: master
Commit: ebe20da774cf62f3241d45db135175369ed475ad
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ebe20da774cf62f3241d45db135175369ed475ad

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Fri Jan  1 12:01:36 2021 -0600

server: Pass the correct size to sockaddr_from_unix() (Valgrind).

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50437
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/sock.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/server/sock.c b/server/sock.c
index 1ff56f7bbe5..5f207e7f180 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -459,6 +459,7 @@ static void fill_accept_output( struct accept_req *req, struct iosb *iosb )
 {
     union unix_sockaddr unix_addr;
     struct WS_sockaddr *win_addr;
+    unsigned int remote_len;
     socklen_t unix_len;
     int fd, size = 0;
     char *out_data;
@@ -495,7 +496,7 @@ static void fill_accept_output( struct accept_req *req, struct iosb *iosb )
         unix_len = sizeof(unix_addr);
         win_addr = (struct WS_sockaddr *)(out_data + req->recv_len + sizeof(int));
         if (getsockname( fd, &unix_addr.addr, &unix_len ) < 0 ||
-            (win_len = sockaddr_from_unix( &unix_addr, win_addr, req->local_len )) < 0)
+            (win_len = sockaddr_from_unix( &unix_addr, win_addr, req->local_len - sizeof(int) )) < 0)
         {
             set_win32_error( sock_get_error( errno ) );
             free( out_data );
@@ -506,8 +507,9 @@ static void fill_accept_output( struct accept_req *req, struct iosb *iosb )
 
     unix_len = sizeof(unix_addr);
     win_addr = (struct WS_sockaddr *)(out_data + req->recv_len + req->local_len + sizeof(int));
+    remote_len = iosb->out_size - req->recv_len - req->local_len;
     if (getpeername( fd, &unix_addr.addr, &unix_len ) < 0 ||
-        (win_len = sockaddr_from_unix( &unix_addr, win_addr, iosb->out_size - req->recv_len - req->local_len )) < 0)
+        (win_len = sockaddr_from_unix( &unix_addr, win_addr, remote_len - sizeof(int) )) < 0)
     {
         set_win32_error( sock_get_error( errno ) );
         free( out_data );




More information about the wine-cvs mailing list