Don't free non-malloced memory and fix memory leak

This commit is contained in:
Ulrich Drepper 2011-05-31 08:45:44 -04:00
parent 356f8bc660
commit c8fc0c9169
2 changed files with 17 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2011-05-31 Andreas Schwab <schwab@redhat.com>
* nscd/nscd_getserv_r.c (nscd_getserv_r): Don't free non-malloced
memory. Use alloca_account. Fix memory leak when retrying.
2011-05-31 Ulrich Drepper <drepper@gmail.com>
* version.h (RELEASE): Bump for 2.14 release.

View File

@ -124,6 +124,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
s_name = (char *) (&found->data[0].servdata + 1);
serv_resp = found->data[0].servdata;
s_proto = s_name + serv_resp.s_name_len;
alloca_aliases_len = 1;
aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len);
aliases_list = ((char *) aliases_len
+ serv_resp.s_aliases_cnt * sizeof (uint32_t));
@ -154,7 +155,9 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ (serv_resp.s_aliases_cnt
* sizeof (uint32_t)));
if (alloca_aliases_len)
tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
tmp = alloca_account (serv_resp.s_aliases_cnt
* sizeof (uint32_t),
alloca_used);
else
{
tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
@ -249,8 +252,9 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ (serv_resp.s_aliases_cnt
* sizeof (uint32_t)));
if (alloca_aliases_len)
aliases_len = alloca (serv_resp.s_aliases_cnt
* sizeof (uint32_t));
aliases_len = alloca_account (serv_resp.s_aliases_cnt
* sizeof (uint32_t),
alloca_used);
else
{
aliases_len = malloc (serv_resp.s_aliases_cnt
@ -368,7 +372,11 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
}
if (retval != -1)
goto retry;
{
if (!alloca_aliases_len)
free (aliases_len);
goto retry;
}
}
if (!alloca_aliases_len)