static struct group_workspace *init_group_workspace(const char *group)
{
- struct group_workspace *buf = xmalloc(sizeof(struct group_workspace));
+ struct group_workspace *buf;
+ long n;
+
+ n = sysconf(_SC_NGROUPS_MAX);
+ if (n < 0 || n > INT_MAX - 1)
+ return NULL;
+
+ buf = xmalloc(sizeof(struct group_workspace));
+ buf->ngroups = n + 1; /* room for the primary gid */
buf->requested_group = get_group_gid(group);
- buf->ngroups = sysconf(_SC_NGROUPS_MAX) + 1; /* room for the primary gid */
buf->groups = xcalloc(buf->ngroups, sizeof(*buf->groups));
return buf;