svn commit: trunk/uClibc/libc/sysdeps/linux/common

vapier at uclibc.org vapier at uclibc.org
Wed Dec 28 21:20:00 UTC 2005


Author: vapier
Date: 2005-12-28 13:19:58 -0800 (Wed, 28 Dec 2005)
New Revision: 12998

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

Modified:
   trunk/uClibc/libc/sysdeps/linux/common/getgroups.c
   trunk/uClibc/libc/sysdeps/linux/common/setgroups.c


Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/common/getgroups.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/common/getgroups.c	2005-12-28 21:16:11 UTC (rev 12997)
+++ trunk/uClibc/libc/sysdeps/linux/common/getgroups.c	2005-12-28 21:19:58 UTC (rev 12998)
@@ -32,7 +32,7 @@
 
 		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 @@
 				groups[i] = kernel_groups[i];
 			}
 		}
-		free(kernel_groups);
+
+		if (kernel_groups)
+			free(kernel_groups);
 		return ngids;
 	}
 }

Modified: trunk/uClibc/libc/sysdeps/linux/common/setgroups.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/common/setgroups.c	2005-12-28 21:16:11 UTC (rev 12997)
+++ trunk/uClibc/libc/sysdeps/linux/common/setgroups.c	2005-12-28 21:19:58 UTC (rev 12998)
@@ -26,11 +26,13 @@
 		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 @@
 		}
 
 		i = __syscall_setgroups(size, kernel_groups);
-		free(kernel_groups);
+		if (kernel_groups)
+			free(kernel_groups);
 		return i;
 	}
 }




More information about the uClibc-cvs mailing list