From 12f5e06b92be1b3cbf593e84b76aaefa417ee381 Mon Sep 17 00:00:00 2001 From: cold-brewed <47337035+cold-brewed@users.noreply.github.com> Date: Fri, 14 Apr 2023 13:05:11 -0400 Subject: [PATCH] viso: Make sure to close file descriptor when a directory is detected (#3251) Co-authored-by: cold-brewed --- src/cdrom/cdrom_image_backend.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cdrom/cdrom_image_backend.c b/src/cdrom/cdrom_image_backend.c index d3f48578d..47dabd37c 100644 --- a/src/cdrom/cdrom_image_backend.c +++ b/src/cdrom/cdrom_image_backend.c @@ -159,7 +159,15 @@ bin_init(const char *filename, int *error) tf->get_length = bin_get_length; tf->close = bin_close; } else { - free(tf); + /* From the check above, error may still be non-zero if opening a directory. + * The error is set for viso to try and open the directory following this function. + * However, we need to make sure the descriptor is closed. */ + if ((tf->file != NULL) && ((stats.st_mode & S_IFMT) == S_IFDIR)) { + /* tf is freed by bin_close */ + bin_close(tf); + } else { + free(tf); + } tf = NULL; }