+2012-07-12 Jeroen van Bemmel <jvb127@gmail.com>
+
+ [BZ #14307]
+ * sysdeps/posix/getaddrinfo.c (gaih_inet): Increase the size of
+ the temporary buffer used to invoke __gethostbyname2_r,
+ __gethostbyaddr_r and gethostbyname4_r to make room for struct
+ host_data / struct gaih_addrtuple.
+ * resolv/nss_dns/dns-host.c (global scope): Move definition of
+ implementation constants MAX_NR_ALIASES and MAX_NR_ADDRS to
+ header file nss/nsswitch.h.
+ * nss/nsswitch.h (global scope): Add definition of implementation
+ constants MAX_NR_ALIASES and MAX_NR_ADDRS (moved from
+ resolv/nss_dns/dns-host.c).
+
2012-07-11 Andreas Jaeger <aj@suse.de>
* po/fr.po: Update from translation team.
-/* Copyright (C) 1996-1999,2001,2002,2003,2004,2007,2010,2011
- Free Software Foundation, Inc.
+/* Copyright (C) 1996-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
int *h_errnop);
libc_hidden_proto (__nss_hostname_digits_dots)
+/* Maximum number of aliases we allow. */
+#define MAX_NR_ALIASES 48
+#define MAX_NR_ADDRS 48
+
#endif /* nsswitch.h */
#define RESOLVSORT
-/* Maximum number of aliases we allow. */
-#define MAX_NR_ALIASES 48
-#define MAX_NR_ADDRS 48
-
#if PACKETSZ > 65536
# define MAXPACKET PACKETSZ
#else
IPv6 scope ids. */
if (req->ai_family == AF_INET)
{
- size_t tmpbuflen = 512;
+ /* Allocate additional room for struct host_data. */
+ size_t tmpbuflen = (512 + MAX_NR_ALIASES * sizeof(char*)
+ + 16 * sizeof(char));
assert (tmpbuf == NULL);
tmpbuf = alloca_account (tmpbuflen, alloca_used);
int rc;
old_res_options = _res.options;
_res.options &= ~RES_USE_INET6;
- size_t tmpbuflen = 1024;
+ size_t tmpbuflen = 1024 + sizeof(struct gaih_addrtuple);
malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen);
assert (tmpbuf == NULL);
if (!malloc_tmpbuf)
struct hostent *h = NULL;
int herrno;
struct hostent th;
- size_t tmpbuf2len = 512;
+ /* Add room for struct host_data. */
+ size_t tmpbuf2len = (512 + (MAX_NR_ALIASES+MAX_NR_ADDRS+1)
+ * sizeof(char*) + 16 * sizeof(char));
do
{