diff options
author | Rob Landley <rob@landley.net> | 2006-08-22 23:40:28 +0000 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2006-08-22 23:40:28 +0000 |
commit | ecb29573e9d2caf59de17fcb4efff129b35ad792 (patch) | |
tree | be1be2a0dadab03bb2ca20751b0c60524a53dcb1 | |
parent | 98a915713d8d07dccd47067869978ec73543cbfc (diff) | |
download | busybox-w32-ecb29573e9d2caf59de17fcb4efff129b35ad792.tar.gz busybox-w32-ecb29573e9d2caf59de17fcb4efff129b35ad792.tar.bz2 busybox-w32-ecb29573e9d2caf59de17fcb4efff129b35ad792.zip |
"Jordan Crouse" <jordan.crouse@amd.com> says:
The following patch makes coreutils/test.c act fail gracefully if getgroups()
returns a -1. This fixes a problem on the One Laptop Per Child ROM image
whereby we were getting odd Memory exhausted messages for '[' and 'test'.
Found by Mitch Bradley <wmb@firmworks.com>
(Tweaked by Rob: no need to initialize a static to NULL, or realloc something
that's only allocated when it's NULL.)
-rw-r--r-- | coreutils/test.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index bbc802283..c1097c28c 100644 --- a/coreutils/test.c +++ b/coreutils/test.c | |||
@@ -151,7 +151,7 @@ typedef int arith_t; | |||
151 | 151 | ||
152 | static char **t_wp; | 152 | static char **t_wp; |
153 | static struct t_op const *t_wp_op; | 153 | static struct t_op const *t_wp_op; |
154 | static gid_t *group_array = NULL; | 154 | static gid_t *group_array; |
155 | static int ngroups; | 155 | static int ngroups; |
156 | 156 | ||
157 | static enum token t_lex(char *s); | 157 | static enum token t_lex(char *s); |
@@ -547,8 +547,10 @@ static int test_eaccess(char *path, int mode) | |||
547 | static void initialize_group_array(void) | 547 | static void initialize_group_array(void) |
548 | { | 548 | { |
549 | ngroups = getgroups(0, NULL); | 549 | ngroups = getgroups(0, NULL); |
550 | group_array = xrealloc(group_array, ngroups * sizeof(gid_t)); | 550 | if (ngroups > 0) { |
551 | getgroups(ngroups, group_array); | 551 | group_array = xmalloc(ngroups * sizeof(gid_t)); |
552 | getgroups(ngroups, group_array); | ||
553 | } | ||
552 | } | 554 | } |
553 | 555 | ||
554 | /* Return non-zero if GID is one that we have in our groups list. */ | 556 | /* Return non-zero if GID is one that we have in our groups list. */ |