version 1.26, 2018/11/05 17:05:50 |
version 1.27, 2018/11/08 18:35:56 |
|
|
size_t i; |
size_t i; |
int fd; |
int fd; |
|
|
for (i = 0; i < count - 1; i++) { |
printf("int"); |
|
if (count > 1) |
|
printf(" [%zu] { ", count); |
|
for (i = 0; i < count; i++) { |
memcpy(&fd, &data[i * sizeof(fd)], sizeof(fd)); |
memcpy(&fd, &data[i * sizeof(fd)], sizeof(fd)); |
printf("fd[%zu] = %d, ", i, fd); |
printf("%d%s", fd, i < count - 1 ? ", " : ""); |
} |
} |
memcpy(&fd, &data[i * sizeof(fd)], sizeof(fd)); |
if (count > 1) |
printf("fd[%zu] = %d\n", i, fd); |
printf(" }"); |
|
printf("\n"); |
} |
} |
|
|
static void |
static void |
|
|
goto invalid; |
goto invalid; |
data = buf + namelen + 1; |
data = buf + namelen + 1; |
datalen = buflen - namelen - 1; |
datalen = buflen - namelen - 1; |
if (datalen == 0) |
|
goto invalid; |
|
/* sanity check */ |
/* sanity check */ |
for (i = 0; i < namelen; ++i) |
for (i = 0; i < namelen; ++i) |
if (!isalpha((unsigned char)name[i])) |
if (!isalpha((unsigned char)name[i])) |
|
|
|
|
if (datalen > sizeof(ss)) |
if (datalen > sizeof(ss)) |
goto invalid; |
goto invalid; |
|
if (datalen < offsetof(struct sockaddr_storage, ss_len) + |
|
sizeof(ss.ss_len)) |
|
goto invalid; |
memcpy(&ss, data, datalen); |
memcpy(&ss, data, datalen); |
if ((ss.ss_family != AF_UNIX && |
if ((ss.ss_family != AF_UNIX && |
datalen < sizeof(struct sockaddr)) || datalen != ss.ss_len) |
datalen < sizeof(struct sockaddr)) || datalen != ss.ss_len) |
|
|
ktrpollfd(data, datalen / sizeof(struct pollfd)); |
ktrpollfd(data, datalen / sizeof(struct pollfd)); |
} else if (strcmp(name, "cmsghdr") == 0) { |
} else if (strcmp(name, "cmsghdr") == 0) { |
char *cmsg; |
char *cmsg; |
|
|
|
if (datalen == 0) |
|
goto invalid; |
|
|
if ((cmsg = malloc(datalen)) == NULL) |
if ((cmsg = malloc(datalen)) == NULL) |
err(1, "malloc"); |
err(1, "malloc"); |