recvfrom: don't convert address if addrsize is 0 (#1153)

This commit is contained in:
Gavin Hayes 2024-05-03 11:03:57 -04:00 committed by GitHub
parent b6e40a3a58
commit deff138e7e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 51 additions and 3 deletions

View file

@ -70,6 +70,9 @@ ssize_t recvfrom(int fd, void *buf, size_t size, int flags,
if (__isfdkind(fd, kFdSocket)) {
rc = sys_recvfrom_nt(fd, (struct iovec[]){{buf, size}}, 1, flags, &addr,
&addrsize);
if (rc != -1 && addrsize == sizeof(addr)) {
addrsize = 0;
}
} else if (__isfdkind(fd, kFdFile) && !opt_out_srcaddr) { /* socketpair */
if (!flags) {
rc = sys_read_nt(fd, (struct iovec[]){{buf, size}}, 1, -1);
@ -84,10 +87,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;