summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-05-01 12:25:01 -0400
committerRich Felker <dalias@aerifal.cx>2015-05-01 12:25:01 -0400
commit58fa856960d3073bcf84adac8e8bd6c555674271 (patch)
tree6650cc37ca552169a994e857f3014d0fa0a39e62
parent18f75b80fd67fd7348fcfb807216f654597b592f (diff)
downloadmusl-58fa856960d3073bcf84adac8e8bd6c555674271.tar.gz
fix mishandling of ENOMEM return case in internal getgrent_a function
due to an incorrect return statement in this error case, the previously blocked cancellation state was not restored and no result was stored. this could lead to invalid (read) accesses in the caller resulting in crashes or nonsensical result data in the event of memory exhaustion.
-rw-r--r--src/passwd/getgrent_a.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/passwd/getgrent_a.c b/src/passwd/getgrent_a.c
index ecd2f2ea..7fc389d4 100644
--- a/src/passwd/getgrent_a.c
+++ b/src/passwd/getgrent_a.c
@@ -48,7 +48,8 @@ int __getgrent_a(FILE *f, struct group *gr, char **line, size_t *size, char ***m
rv = errno;
free(*line);
*line = 0;
- return 0;
+ gr = 0;
+ goto end;
}
if (*mems) {
mem[0][0] = mems;