diff options
-rw-r--r-- | lib/socket_wrapper/socket_wrapper.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c index cd913275f6..6eb4979d3f 100644 --- a/lib/socket_wrapper/socket_wrapper.c +++ b/lib/socket_wrapper/socket_wrapper.c @@ -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, |