From 9ee5b5a2f0ce9468a5fb0a383d1189da35e72cf6 Mon Sep 17 00:00:00 2001 From: Gavin Hayes Date: Mon, 22 Apr 2024 22:56:43 -0400 Subject: [PATCH] recvfrom: don't convert address if addrsize is 0 Fixes malformed address being returned for recvfrom on connection oriented sockets. --- libc/sock/recvfrom.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libc/sock/recvfrom.c b/libc/sock/recvfrom.c index 98cd7317e..27fac1ed6 100644 --- a/libc/sock/recvfrom.c +++ b/libc/sock/recvfrom.c @@ -84,10 +84,14 @@ ssize_t recvfrom(int fd, void *buf, size_t size, int flags, } if (rc != -1) { - if (IsBsd()) { - __convert_bsd_to_sockaddr(&addr); + if (addrsize) { + if (IsBsd()) { + __convert_bsd_to_sockaddr(&addr); + } + __write_sockaddr(&addr, opt_out_srcaddr, opt_inout_srcaddrsize); + } else { + *opt_inout_srcaddrsize = 0; } - __write_sockaddr(&addr, opt_out_srcaddr, opt_inout_srcaddrsize); } END_CANCELATION_POINT;