diff options
author | shin <shin@FreeBSD.org> | 2000-01-27 17:24:53 +0000 |
---|---|---|
committer | shin <shin@FreeBSD.org> | 2000-01-27 17:24:53 +0000 |
commit | 021aaed8bfae0e1753faf12a105fed8f0bd63034 (patch) | |
tree | 5c116f8e0336df75fa9d61fe6edaddc237fe3787 | |
parent | 7d7738eedb35bcea817e3010fbbb820aa9ab6bbd (diff) | |
download | FreeBSD-src-021aaed8bfae0e1753faf12a105fed8f0bd63034.zip FreeBSD-src-021aaed8bfae0e1753faf12a105fed8f0bd63034.tar.gz |
Avoid core dump when ai_canonname is NULL.
(Now this happens for numeric addrs, as getaddrinfo() 1.3 -> 1.4 change)
Reviewed by: Mark Huizer <xaa@timewasters.nl>
-rw-r--r-- | lib/libutil/realhostname.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/libutil/realhostname.c b/lib/libutil/realhostname.c index 7236890..2c9c5c5 100644 --- a/lib/libutil/realhostname.c +++ b/lib/libutil/realhostname.c @@ -122,8 +122,10 @@ realhostname_sa(char *host, size_t hsize, struct sockaddr *addr, int addrlen) port = ((struct sockinet *)addr)->si_port; ((struct sockinet *)addr)->si_port = 0; if (!memcmp(sa, addr, sa->sa_len)) { - strncpy(host, res->ai_canonname, - hsize); + if (res->ai_canonname != 0) + strncpy(host, + res->ai_canonname, + hsize); result = HOSTNAME_FOUND; ((struct sockinet *)addr)->si_port = port; @@ -146,8 +148,10 @@ realhostname_sa(char *host, size_t hsize, struct sockaddr *addr, int addrlen) if (IN6_IS_ADDR_V4MAPPED(in6) && !memcmp(&in6->s6_addr[12], in, sizeof(*in))) { - strncpy(host, res->ai_canonname, - hsize); + if (res->ai_canonname != 0) + strncpy(host, + res->ai_canonname, + hsize); result = HOSTNAME_FOUND; break; } |