diff options
author | Florian Weimer <fweimer@redhat.com> | 2018-08-14 10:52:06 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2018-08-14 10:52:06 +0200 |
commit | e95c6f61920a0f9237cfb292fa44ad500e1df09b (patch) | |
tree | 5e0b22cbbb895a01a8a92741929be1051d752c95 /nss/nss_files/files-alias.c | |
parent | 2d7acfac3ebf266dcbc82d0d6cc576f626953a03 (diff) | |
download | glibc-e95c6f61920a0f9237cfb292fa44ad500e1df09b.tar.gz glibc-e95c6f61920a0f9237cfb292fa44ad500e1df09b.tar.xz glibc-e95c6f61920a0f9237cfb292fa44ad500e1df09b.zip |
nss_files: Fix file stream leak in aliases lookup [BZ #23521]
In order to get a clean test case, it was necessary to fix partially fixed bug 23522 as well.
Diffstat (limited to 'nss/nss_files/files-alias.c')
-rw-r--r-- | nss/nss_files/files-alias.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index cfd34b66b9..35b0bfc5d2 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -221,6 +221,13 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, { while (! feof_unlocked (listfile)) { + if (room_left < 2) + { + free (old_line); + fclose (listfile); + goto no_more_room; + } + first_unused[room_left - 1] = '\xff'; line = fgets_unlocked (first_unused, room_left, listfile); @@ -229,6 +236,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, if (first_unused[room_left - 1] != '\xff') { free (old_line); + fclose (listfile); goto no_more_room; } @@ -256,6 +264,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result, + __alignof__ (char *))) { free (old_line); + fclose (listfile); goto no_more_room; } room_left -= ((first_unused - cp) |