]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix memory leak in NIS grp database handling.
authorJoe Landers <jlanders@vmware.com>
Thu, 29 Oct 2009 23:22:01 +0000 (16:22 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 29 Oct 2009 23:22:01 +0000 (16:22 -0700)
ChangeLog
nis/nss_nis/nis-grp.c

index 15a753bf984d55ec9c09abb6baed58eec191ccea..81defae3f52ca691434fb4859738f277640db348 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2009-10-29  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ #10713]
+       * nis/nss_nis/nis-grp.c (internal_nis_endgrent): Start freeing blocks
+       from intern.start.  Patch by Joe Landers <jlanders@vmware.com>.
+
        [BZ #10780]
        * libio/ioputs.c (_IO_puts): Make sure to not return a number which
        overflows the int return type.
index 6e36cf828f1a9bb3f6ecdd470577e52e39956944..071d8a2a558fb6d0313128bdcab17e7ccb945647 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999, 2001-2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001-2004,2006,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
 
@@ -55,7 +55,7 @@ internal_nis_endgrent (void)
       oldkeylen = 0;
     }
 
-  struct response_t *curr = intern.next;
+  struct response_t *curr = intern.start;
 
   while (curr != NULL)
     {
@@ -203,16 +203,16 @@ internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen,
        }
 
       if (__builtin_expect ((size_t) (len + 1) > buflen, 0))
-        {
-          free (result);
-          *errnop = ERANGE;
-          return NSS_STATUS_TRYAGAIN;
-        }
+       {
+         free (result);
+         *errnop = ERANGE;
+         return NSS_STATUS_TRYAGAIN;
+       }
 
       char *p = strncpy (buffer, result, len);
       buffer[len] = '\0';
       while (isspace (*p))
-        ++p;
+       ++p;
       if (!batch_read)
        free (result);
 
@@ -280,7 +280,7 @@ _nss_nis_getgrnam_r (const char *name, struct group *grp,
       enum nss_status retval = yperr2nss (yperr);
 
       if (retval == NSS_STATUS_TRYAGAIN)
-        *errnop = errno;
+       *errnop = errno;
       return retval;
     }
 
@@ -329,7 +329,7 @@ _nss_nis_getgrgid_r (gid_t gid, struct group *grp,
       enum nss_status retval = yperr2nss (yperr);
 
       if (retval == NSS_STATUS_TRYAGAIN)
-        *errnop = errno;
+       *errnop = errno;
       return retval;
     }