1 diff -rup a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
2 --- a/nscd/nscd_getserv_r.c 2012-04-04 16:37:27.873951850 -0600
3 +++ b/nscd/nscd_getserv_r.c 2012-04-04 16:37:49.904837348 -0600
4 @@ -124,6 +123,7 @@ nscd_getserv_r (const char *crit, size_t
5 s_name = (char *) (&found->data[0].servdata + 1);
6 serv_resp = found->data[0].servdata;
7 s_proto = s_name + serv_resp.s_name_len;
8 + alloca_aliases_len = 1;
9 aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len);
10 aliases_list = ((char *) aliases_len
11 + serv_resp.s_aliases_cnt * sizeof (uint32_t));
12 @@ -154,7 +154,9 @@ nscd_getserv_r (const char *crit, size_t
13 + (serv_resp.s_aliases_cnt
14 * sizeof (uint32_t)));
15 if (alloca_aliases_len)
16 - tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
17 + tmp = alloca_account (serv_resp.s_aliases_cnt
18 + * sizeof (uint32_t),
22 tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
23 @@ -249,8 +251,9 @@ nscd_getserv_r (const char *crit, size_t
24 + (serv_resp.s_aliases_cnt
25 * sizeof (uint32_t)));
26 if (alloca_aliases_len)
27 - aliases_len = alloca (serv_resp.s_aliases_cnt
28 - * sizeof (uint32_t));
29 + aliases_len = alloca_account (serv_resp.s_aliases_cnt
30 + * sizeof (uint32_t),
34 aliases_len = malloc (serv_resp.s_aliases_cnt
35 @@ -368,7 +371,11 @@ nscd_getserv_r (const char *crit, size_t
41 + if (!alloca_aliases_len)
42 + free ((void *) aliases_len);
47 if (!alloca_aliases_len)