summaryrefslogtreecommitdiff
path: root/extension
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2023-02-09 20:38:57 +0200
committerArnold D. Robbins <arnold@skeeve.com>2023-02-09 20:38:57 +0200
commit2bc5b3024008eb51cd27ee36c18bac68dd904226 (patch)
tree6d2c7b88029ba82271a4737f2d6e3eb26e8182fb /extension
parent1bcf38aaf4dd205a64747ef10b7d847ffe49265b (diff)
downloadgawk-2bc5b3024008eb51cd27ee36c18bac68dd904226.tar.gz
Fix possible fd leak in readdir extension.
Diffstat (limited to 'extension')
-rw-r--r--extension/ChangeLog6
-rw-r--r--extension/readdir.c5
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"),