socket_wrapper: fix handling of addr and addrlen
authorStefan Metzmacher <metze@samba.org>
Wed, 9 Mar 2011 10:46:34 +0000 (11:46 +0100)
committerGünther Deschner <gd@samba.org>
Wed, 9 Mar 2011 11:27:25 +0000 (12:27 +0100)
metze

lib/socket_wrapper/socket_wrapper.c

index cd913275f63f8edf0d1aa13b8e104cc410e05bcd..6eb4979d3fc66d1243197b48034f04a679fe99a7 100644 (file)
@@ -1538,10 +1538,11 @@ _PUBLIC_ int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
        child_si->peername = sockaddr_dup(my_addr, len);
 
        if (addr != NULL && addrlen != NULL) {
-           *addrlen = len;
-           if (*addrlen >= len)
-               memcpy(addr, my_addr, len);
-           *addrlen = 0;
+               size_t copy_len = MIN(*addrlen, len);
+               if (copy_len > 0) {
+                       memcpy(addr, my_addr, copy_len);
+               }
+               *addrlen = len;
        }
 
        ret = real_getsockname(fd, (struct sockaddr *)(void *)&un_my_addr,