summaryrefslogtreecommitdiffstats
path: root/pw/pw_group.c
diff options
context:
space:
mode:
authorJulian Elischer <julian@FreeBSD.org>2014-03-06 19:26:08 +0000
committerJulian Elischer <julian@FreeBSD.org>2014-03-06 19:26:08 +0000
commit15d3ceac1979629648a7e3eaf5711217ee870fdc (patch)
tree28fce21d8d80e1b276566a74f38399e54a26b2be /pw/pw_group.c
parent446019b8eaaa79091b2ed36868c88624cd0a87c7 (diff)
downloadpw-darwin-15d3ceac1979629648a7e3eaf5711217ee870fdc.tar.gz
pw-darwin-15d3ceac1979629648a7e3eaf5711217ee870fdc.tar.zst
pw-darwin-15d3ceac1979629648a7e3eaf5711217ee870fdc.zip
Stop pw(8) from segfaulting when given certain input
PR:187310 Submitted by: Kim Shrier Obtained from: bug MFC after: 1 week
Diffstat (limited to 'pw/pw_group.c')
-rw-r--r--pw/pw_group.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/pw/pw_group.c b/pw/pw_group.c
index 3259412..391e477 100644
--- a/pw/pw_group.c
+++ b/pw/pw_group.c
@@ -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;