Browse Source

make sure we handle the (malloc(0)==NULL) case as Aubrey points out via the e-mail list

Mike Frysinger 19 years ago
parent
commit
ba56672d0f
2 changed files with 12 additions and 7 deletions
  1. 4 2
      libc/sysdeps/linux/common/getgroups.c
  2. 8 5
      libc/sysdeps/linux/common/setgroups.c

+ 4 - 2
libc/sysdeps/linux/common/getgroups.c

@@ -32,7 +32,7 @@ ret_error:
 
 		size = MIN(size, sysconf(_SC_NGROUPS_MAX));
 		kernel_groups = (__kernel_gid_t *)malloc(sizeof(*kernel_groups) * size);
-		if (kernel_groups == NULL)
+		if (size && kernel_groups == NULL)
 			goto ret_error;
 
 		ngids = __syscall_getgroups(size, kernel_groups);
@@ -41,7 +41,9 @@ ret_error:
 				groups[i] = kernel_groups[i];
 			}
 		}
-		free(kernel_groups);
+
+		if (kernel_groups)
+			free(kernel_groups);
 		return ngids;
 	}
 }

+ 8 - 5
libc/sysdeps/linux/common/setgroups.c

@@ -26,11 +26,13 @@ ret_error:
 		return -1;
 	} else {
 		size_t i;
-		__kernel_gid_t *kernel_groups;
+		__kernel_gid_t *kernel_groups = NULL;
 
-		kernel_groups = (__kernel_gid_t *)malloc(sizeof(*kernel_groups) * size);
-		if (kernel_groups == NULL)
-			goto ret_error;
+		if (size) {
+			kernel_groups = (__kernel_gid_t *)malloc(sizeof(*kernel_groups) * size);
+			if (kernel_groups == NULL)
+				goto ret_error;
+		}
 
 		for (i = 0; i < size; i++) {
 			kernel_groups[i] = (groups)[i];
@@ -40,7 +42,8 @@ ret_error:
 		}
 
 		i = __syscall_setgroups(size, kernel_groups);
-		free(kernel_groups);
+		if (kernel_groups)
+			free(kernel_groups);
 		return i;
 	}
 }