diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2023-02-09 20:38:57 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2023-02-09 20:38:57 +0200 |
commit | 2bc5b3024008eb51cd27ee36c18bac68dd904226 (patch) | |
tree | 6d2c7b88029ba82271a4737f2d6e3eb26e8182fb /extension | |
parent | 1bcf38aaf4dd205a64747ef10b7d847ffe49265b (diff) | |
download | gawk-2bc5b3024008eb51cd27ee36c18bac68dd904226.tar.gz |
Fix possible fd leak in readdir extension.
Diffstat (limited to 'extension')
-rw-r--r-- | extension/ChangeLog | 6 | ||||
-rw-r--r-- | extension/readdir.c | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index abc2bf95..14b95fa0 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2023-02-09 Arnold D. Robbins <arnold@skeeve.com> + + * readdir.c (dir_can_take_control_of): If ! HAVE_OPENDIR, + don't leak any open file descriptor. Thanks to + Eli Zaretskii <eliz@gnu.org> for the bug report. + 2023-01-22 Arnold D. Robbins <arnold@skeeve.com> * configure.ac: Check also for strptime. diff --git a/extension/readdir.c b/extension/readdir.c index 77059168..8ec695d7 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -270,8 +270,11 @@ dir_take_control_of(awk_input_buf_t *iobuf) dp = fdopendir(iobuf->fd); #else dp = opendir(iobuf->name); - if (dp != NULL) + if (dp != NULL) { + if (iobuf->fd != INVALID_HANDLE) + (void) close(iobuf->fd); iobuf->fd = dirfd(dp); + } #endif if (dp == NULL) { warning(ext_id, _("dir_take_control_of: opendir/fdopendir failed: %s"), |