Stop pw(8) from segfaulting when given certain input

PR:187310
Submitted by:	Kim Shrier
Obtained from:	bug
MFC after:	1 week
This commit is contained in:
Julian Elischer 2014-03-06 19:26:08 +00:00
parent 9362e2bc57
commit 5691bbf05d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=262864

View File

@ -227,10 +227,12 @@ pw_group(struct userconf * cnf, int mode, struct cargs * args)
else if (arg->ch == 'm') {
int k = 0;
while (grp->gr_mem[k] != NULL) {
if (extendarray(&members, &grmembers, i + 2) != -1)
members[i++] = grp->gr_mem[k];
k++;
if (grp->gr_mem != NULL) {
while (grp->gr_mem[k] != NULL) {
if (extendarray(&members, &grmembers, i + 2) != -1)
members[i++] = grp->gr_mem[k];
k++;
}
}
}
@ -311,6 +313,9 @@ delete_members(char ***members, int *grmembers, int *i, struct carg *arg,
int k;
struct passwd *pwd;
if (grp->gr_mem == NULL)
return;
k = 0;
while (grp->gr_mem[k] != NULL) {
matchFound = false;
@ -415,8 +420,10 @@ print_group(struct group * grp, int pretty)
printf("Group Name: %-15s #%lu\n"
" Members: ",
grp->gr_name, (long) grp->gr_gid);
for (i = 0; grp->gr_mem[i]; i++)
printf("%s%s", i ? "," : "", grp->gr_mem[i]);
if (grp->gr_mem != NULL) {
for (i = 0; grp->gr_mem[i]; i++)
printf("%s%s", i ? "," : "", grp->gr_mem[i]);
}
fputs("\n\n", stdout);
}
return EXIT_SUCCESS;