From: Dmitry Bilunov Date: Sat, 24 Jun 2017 14:49:34 +0000 (+0200) Subject: getaddrinfo: Merge IPv6 addresses and IPv4 addresses [BZ #21295] X-Git-Tag: glibc-2.26~240 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5cf88a83f27b0cd2d5a83511930e40d716c939eb;p=thirdparty%2Fglibc.git getaddrinfo: Merge IPv6 addresses and IPv4 addresses [BZ #21295] --- diff --git a/ChangeLog b/ChangeLog index 1b4c8ddd7e1..eb9eb588a4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-06-24 Dmitry Bilunov + + [BZ #21295] + * sysdeps/posix/getaddrinfo.c (convert_hostent_to_gaih_addrtuple): + Append addresses at the end of the list. + 2017-06-23 H.J. Lu [BZ #21666] diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 4ec17961adb..91e0a76c5cf 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -190,16 +190,16 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp, /* Convert struct hostent to a list of struct gaih_addrtuple objects. h_name is not copied, and the struct hostent object must not be - deallocated prematurely. *RESULT must be NULL or a pointer to an - object allocated using malloc, which is freed. */ + deallocated prematurely. *RESULT must be NULL or a pointer to a + linked-list. The new addresses are appended at the end. */ static bool convert_hostent_to_gaih_addrtuple (const struct addrinfo *req, int family, struct hostent *h, struct gaih_addrtuple **result) { - free (*result); - *result = NULL; + while (*result) + result = &(*result)->next; /* Count the number of addresses in h->h_addr_list. */ size_t count = 0;