svn commit: r262864 - head/usr.sbin/pw

Julian Elischer julian at FreeBSD.org
Thu Mar 6 19:26:09 UTC 2014


Author: julian
Date: Thu Mar  6 19:26:08 2014
New Revision: 262864
URL: http://svnweb.freebsd.org/changeset/base/262864

Log:
  Stop pw(8) from segfaulting when given certain input
  
  PR:187310
  Submitted by:	Kim Shrier
  Obtained from:	bug
  MFC after:	1 week

Modified:
  head/usr.sbin/pw/pw_group.c

Modified: head/usr.sbin/pw/pw_group.c
==============================================================================
--- head/usr.sbin/pw/pw_group.c	Thu Mar  6 18:50:35 2014	(r262863)
+++ head/usr.sbin/pw/pw_group.c	Thu Mar  6 19:26:08 2014	(r262864)
@@ -227,10 +227,12 @@ pw_group(struct userconf * cnf, int mode
 		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 *grm
 	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 pret
 		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;


More information about the svn-src-all mailing list