mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
network-utils: handle inet_ntop errors
This commit is contained in:
parent
2093fb2071
commit
1030000890
1 changed files with 15 additions and 13 deletions
|
|
@ -82,31 +82,33 @@ static inline int pw_net_parse_address_port(const char *address,
|
||||||
|
|
||||||
static inline int pw_net_get_ip(const struct sockaddr_storage *sa, char *ip, size_t len, bool *ip4, uint16_t *port)
|
static inline int pw_net_get_ip(const struct sockaddr_storage *sa, char *ip, size_t len, bool *ip4, uint16_t *port)
|
||||||
{
|
{
|
||||||
|
if (ip4)
|
||||||
|
*ip4 = sa->ss_family == AF_INET;
|
||||||
|
|
||||||
if (sa->ss_family == AF_INET) {
|
if (sa->ss_family == AF_INET) {
|
||||||
struct sockaddr_in *in = (struct sockaddr_in*)sa;
|
struct sockaddr_in *in = (struct sockaddr_in*)sa;
|
||||||
inet_ntop(sa->ss_family, &in->sin_addr, ip, len);
|
if (inet_ntop(sa->ss_family, &in->sin_addr, ip, len) == NULL)
|
||||||
|
return -errno;
|
||||||
if (port)
|
if (port)
|
||||||
*port = ntohs(in->sin_port);
|
*port = ntohs(in->sin_port);
|
||||||
} else if (sa->ss_family == AF_INET6) {
|
} else if (sa->ss_family == AF_INET6) {
|
||||||
struct sockaddr_in6 *in = (struct sockaddr_in6*)sa;
|
struct sockaddr_in6 *in = (struct sockaddr_in6*)sa;
|
||||||
inet_ntop(sa->ss_family, &in->sin6_addr, ip, len);
|
if (inet_ntop(sa->ss_family, &in->sin6_addr, ip, len) == NULL)
|
||||||
|
return -errno;
|
||||||
if (port)
|
if (port)
|
||||||
*port = ntohs(in->sin6_port);
|
*port = ntohs(in->sin6_port);
|
||||||
if (in->sin6_scope_id == 0 || len <= 1)
|
|
||||||
goto finish;
|
|
||||||
|
|
||||||
size_t curlen = strlen(ip);
|
if (in->sin6_scope_id != 0 && len > 1) {
|
||||||
if (len-(curlen+1) >= IFNAMSIZ) {
|
size_t curlen = strlen(ip);
|
||||||
ip += curlen+1;
|
if (len-(curlen+1) >= IFNAMSIZ) {
|
||||||
ip[-1] = '%';
|
ip += curlen+1;
|
||||||
if (if_indextoname(in->sin6_scope_id, ip) == NULL)
|
ip[-1] = '%';
|
||||||
ip[-1] = 0;
|
if (if_indextoname(in->sin6_scope_id, ip) == NULL)
|
||||||
|
ip[-1] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
finish:
|
|
||||||
if (ip4)
|
|
||||||
*ip4 = sa->ss_family == AF_INET;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue