From d5aba27d60ed3a3057fcb3d9808de69bd0976b6e Mon Sep 17 00:00:00 2001 From: Patrick Servello Date: Sat, 31 Aug 2019 20:47:26 -0500 Subject: [PATCH] Fix for issue #260 Certain functions within lfs_emubd.c were susceptible to file resource leaks due to certain code paths not issuing an fclose() before returning. --- emubd/lfs_emubd.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/emubd/lfs_emubd.c b/emubd/lfs_emubd.c index ee20f27..60c3470 100644 --- a/emubd/lfs_emubd.c +++ b/emubd/lfs_emubd.c @@ -102,6 +102,7 @@ int lfs_emubd_create(const struct lfs_config *cfg, const char *path) { if (res < 1) { err = -errno; LFS_TRACE("lfs_emubd_create -> %"PRId32, err); + fclose(f); return err; } @@ -124,6 +125,7 @@ int lfs_emubd_create(const struct lfs_config *cfg, const char *path) { if (res < 1) { err = -errno; LFS_TRACE("lfs_emubd_create -> %"PRId32, err); + fclose(f); return err; } @@ -178,6 +180,7 @@ int lfs_emubd_read(const struct lfs_config *cfg, lfs_block_t block, if (err) { err = -errno; LFS_TRACE("lfs_emubd_read -> %d", err); + fclose(f); return err; } @@ -185,6 +188,7 @@ int lfs_emubd_read(const struct lfs_config *cfg, lfs_block_t block, if (res < size && !feof(f)) { err = -errno; LFS_TRACE("lfs_emubd_read -> %d", err); + fclose(f); return err; } @@ -230,6 +234,7 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block, if (err) { err = -errno; LFS_TRACE("lfs_emubd_prog -> %d", err); + fclose(f); return err; } @@ -237,6 +242,7 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block, if (res < size) { err = -errno; LFS_TRACE("lfs_emubd_prog -> %d", err); + fclose(f); return err; } @@ -244,6 +250,7 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block, if (err) { err = -errno; LFS_TRACE("lfs_emubd_prog -> %d", err); + fclose(f); return err; } @@ -252,6 +259,7 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block, if (res < 1) { err = -errno; LFS_TRACE("lfs_emubd_prog -> %d", err); + fclose(f); return err; } @@ -340,6 +348,7 @@ int lfs_emubd_sync(const struct lfs_config *cfg) { if (res < 1) { int err = -errno; LFS_TRACE("lfs_emubd_sync -> %d", err); + fclose(f); return err; } @@ -364,6 +373,7 @@ int lfs_emubd_sync(const struct lfs_config *cfg) { if (res < 1) { err = -errno; LFS_TRACE("lfs_emubd_sync -> %d", err); + fclose(f); return err; } @@ -388,6 +398,7 @@ int lfs_emubd_sync(const struct lfs_config *cfg) { if (res < 1) { err = -errno; LFS_TRACE("lfs_emubd_sync -> %d", err); + fclose(f); return err; }