From ba10e25d1c8d7ce7ed776e1977677ea3e7dcccec Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 25 May 2001 03:32:40 +0000 Subject: [PATCH] pullup from BIND 8. 1214. [bug] getrgnam()/getgrgid() leaked memory. --- lib/bind/irs/gen_gr.c | 11 +++++++---- lib/bind/irs/irp_gr.c | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/bind/irs/gen_gr.c b/lib/bind/irs/gen_gr.c index e75236201b..adf707ebc3 100644 --- a/lib/bind/irs/gen_gr.c +++ b/lib/bind/irs/gen_gr.c @@ -16,7 +16,7 @@ */ #if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id: gen_gr.c,v 1.1 2001/03/29 06:31:43 marka Exp $"; +static const char rcsid[] = "$Id: gen_gr.c,v 1.2 2001/05/25 03:32:40 marka Exp $"; #endif /* Imports */ @@ -372,15 +372,18 @@ grmerge(struct irs_gr *this, const struct group *src, int preserve) { /* No work to do. */ return; } - cp = realloc(pvt->membuf, pvt->membufsize + n); + cp = realloc(pvt->membuf, (preserve ? pvt->membufsize : 0) + n); if (!cp) { /* No harm done, no work done. */ return; } memadj = cp - pvt->membuf; pvt->membuf = cp; - cp += pvt->membufsize; - pvt->membufsize += n; + if (preserve) { + cp += pvt->membufsize; + pvt->membufsize += n; + } else + pvt->membufsize = n; /* * Add new elements. diff --git a/lib/bind/irs/irp_gr.c b/lib/bind/irs/irp_gr.c index 1e2efa11de..d914108a26 100644 --- a/lib/bind/irs/irp_gr.c +++ b/lib/bind/irs/irp_gr.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id: irp_gr.c,v 1.1 2001/03/29 06:31:48 marka Exp $"; +static const char rcsid[] = "$Id: irp_gr.c,v 1.2 2001/05/25 03:32:38 marka Exp $"; #endif /* LIBC_SCCS and not lint */ /* extern */ @@ -397,6 +397,9 @@ free_group(struct group *gr) { for (p = gr->gr_mem ; p != NULL && *p != NULL ; p++) free(*p); + if (gr->gr_mem) + free(gr->gr_mem); + if (p != NULL) free(p); }