--- glibc-2.2.5/grp/initgroups.c.orig 2003-11-13 13:03:29.620138976 -0500 +++ glibc-2.2.5/grp/initgroups.c 2003-11-13 13:05:03.693837600 -0500 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -207,6 +208,9 @@ return -1; result = internal_getgrouplist (user, group, &size, &newgroups, -1); + + memcpy (groups, newgroups, MIN (*ngroups, result) * sizeof (gid_t)); + if (result > *ngroups) { *ngroups = result; @@ -214,8 +218,6 @@ } else *ngroups = result; - - memcpy (groups, newgroups, *ngroups * sizeof (gid_t)); free (newgroups); return result;