Fix calculated size of struct sockaddr_un on OSX #104

This commit is contained in:
Jeremy Lakeman 2016-05-09 09:07:27 +09:30
parent c78ee668d5
commit 7f5f71aec8
2 changed files with 4 additions and 4 deletions

View File

@ -164,7 +164,7 @@ static void recv_packet(int fd, struct network *network, struct peer *destinatio
return; return;
} }
unicast_addr.addrlen=sizeof unicast_addr.local.sun_family + strlen(unicast_addr.local.sun_path) + 1; unicast_addr.addrlen=sizeof unicast_addr.local - sizeof unicast_addr.local.sun_path + strlen(unicast_addr.local.sun_path) + 1;
peer = emalloc_zero(sizeof(struct peer)); peer = emalloc_zero(sizeof(struct peer));
if (!peer) { if (!peer) {

View File

@ -55,7 +55,7 @@ int _make_local_sockaddr(struct __sourceloc __whence, struct socket_address *add
va_end(ap); va_end(ap);
if (!r) if (!r)
return WHY("socket name overflow"); return WHY("socket name overflow");
addr->addrlen=sizeof addr->local.sun_family + strlen(addr->local.sun_path) + 1; addr->addrlen=sizeof addr->local - sizeof addr->local.sun_path + strlen(addr->local.sun_path) + 1;
// TODO perform real path transformation in making the serval instance path // TODO perform real path transformation in making the serval instance path
// if (real_sockaddr(addr, addr) == -1) // if (real_sockaddr(addr, addr) == -1)
// return -1; // return -1;
@ -292,14 +292,14 @@ ssize_t _recv_message_frag(struct __sourceloc __whence, int fd, struct socket_ad
struct cmsghdr cmsgs[16]; struct cmsghdr cmsgs[16];
struct msghdr msg = { struct msghdr msg = {
.msg_name = (void *)&address->addr, .msg_name = (void *)&address->addr,
.msg_namelen = address->addrlen, .msg_namelen = sizeof(address->raw),
.msg_iov = data->iov, .msg_iov = data->iov,
.msg_iovlen = data->fragment_count, .msg_iovlen = data->fragment_count,
.msg_control = cmsgs, .msg_control = cmsgs,
.msg_controllen = sizeof cmsgs, .msg_controllen = sizeof cmsgs,
.msg_flags = 0 .msg_flags = 0
}; };
bzero(&address->addr, address->addrlen); bzero(address, sizeof(struct socket_address));
ssize_t ret = recvmsg(fd, &msg, 0); ssize_t ret = recvmsg(fd, &msg, 0);
if (ret == -1 && errno != EAGAIN && errno != EWOULDBLOCK) if (ret == -1 && errno != EAGAIN && errno != EWOULDBLOCK)
WHYF_perror("recvmsg(%d,{name=%p,namelen=%u,iov=%s,control=%p,controllen=%u},0)", WHYF_perror("recvmsg(%d,{name=%p,namelen=%u,iov=%s,control=%p,controllen=%u},0)",