]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
pullup from BIND 8.
authorMark Andrews <marka@isc.org>
Fri, 25 May 2001 03:32:40 +0000 (03:32 +0000)
committerMark Andrews <marka@isc.org>
Fri, 25 May 2001 03:32:40 +0000 (03:32 +0000)
1214.   [bug]           getrgnam()/getgrgid() leaked memory.

lib/bind/irs/gen_gr.c
lib/bind/irs/irp_gr.c

index e75236201b3c36fff1dc6482388ad0bfab338840..adf707ebc338f1ce1d8895b1bd2a1e5cd3e356bc 100644 (file)
@@ -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.
index 1e2efa11de7675ce412f25a4bd46b085ae5293a0..d914108a264f1efcff6f6e0e24f54a92c883ead3 100644 (file)
@@ -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);
 }