daemon: handle gethostbyname() error
If the user-supplied hostname can't be found then we should not use it. We already avoid doing that in the non-NO_IPV6 case by checking if the return value of getaddrinfo() is zero (success). Do the same in the NO_IPV6 case and make sure the return value of gethostbyname() isn't NULL before dereferencing this pointer. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e6aaa39347
commit
eb6c403500
25
daemon.c
25
daemon.c
@ -579,20 +579,21 @@ static void parse_host_arg(char *extra_args, int buflen)
|
||||
static char addrbuf[HOST_NAME_MAX + 1];
|
||||
|
||||
hent = gethostbyname(hostname);
|
||||
if (hent) {
|
||||
ap = hent->h_addr_list;
|
||||
memset(&sa, 0, sizeof sa);
|
||||
sa.sin_family = hent->h_addrtype;
|
||||
sa.sin_port = htons(0);
|
||||
memcpy(&sa.sin_addr, *ap, hent->h_length);
|
||||
|
||||
ap = hent->h_addr_list;
|
||||
memset(&sa, 0, sizeof sa);
|
||||
sa.sin_family = hent->h_addrtype;
|
||||
sa.sin_port = htons(0);
|
||||
memcpy(&sa.sin_addr, *ap, hent->h_length);
|
||||
inet_ntop(hent->h_addrtype, &sa.sin_addr,
|
||||
addrbuf, sizeof(addrbuf));
|
||||
|
||||
inet_ntop(hent->h_addrtype, &sa.sin_addr,
|
||||
addrbuf, sizeof(addrbuf));
|
||||
|
||||
free(canon_hostname);
|
||||
canon_hostname = xstrdup(hent->h_name);
|
||||
free(ip_address);
|
||||
ip_address = xstrdup(addrbuf);
|
||||
free(canon_hostname);
|
||||
canon_hostname = xstrdup(hent->h_name);
|
||||
free(ip_address);
|
||||
ip_address = xstrdup(addrbuf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user