diff options
Diffstat (limited to 'ares_getnameinfo.c')
-rw-r--r-- | ares_getnameinfo.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/ares_getnameinfo.c b/ares_getnameinfo.c index fc95d3b..e5b5d9f 100644 --- a/ares_getnameinfo.c +++ b/ares_getnameinfo.c @@ -99,20 +99,22 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, struct nameinfo_query *niquery; unsigned int port = 0; - /* Verify the buffer size */ - if (salen == sizeof(struct sockaddr_in)) + /* Validate socket address family and length */ + if ((sa->sa_family == AF_INET) && + (salen == sizeof(struct sockaddr_in))) { addr = (struct sockaddr_in *)sa; port = addr->sin_port; } - else if (salen == sizeof(struct sockaddr_in6)) + else if ((sa->sa_family == AF_INET6) && + (salen == sizeof(struct sockaddr_in6))) { addr6 = (struct sockaddr_in6 *)sa; port = addr6->sin6_port; } else { - callback(arg, ARES_ENOTIMP, 0, NULL, NULL); + callback(arg, ARES_EBADFAMILY, 0, NULL, NULL); return; } |