cgit

commit 76dc7a3371e487fdc9de7b3b4c991fe370598f0e

Author: Christian Hesse <mail@eworm.de>

cache: fix resource leak: close file handle before return

Coverity-id: 13910
Signed-off-by: Christian Hesse <mail@eworm.de>

 cache.c | 12 +++++++++---


diff --git a/cache.c b/cache.c
index 57c891864ffb8b70447c6db5fd8366f662aadd39..b169d20f779aaa21ed5c3bd8e4e21c62500a0c90 100644
--- a/cache.c
+++ b/cache.c
@@ -215,19 +215,25 @@ 	if (tmp == -1)
 		return errno;
 
 	/* Redirect stdout to lockfile */
-	if (dup2(slot->lock_fd, STDOUT_FILENO) == -1)
+	if (dup2(slot->lock_fd, STDOUT_FILENO) == -1) {
+		close(tmp);
 		return errno;
+	}
 
 	/* Generate cache content */
 	slot->fn();
 
 	/* update stat info */
-	if (fstat(slot->lock_fd, &slot->cache_st))
+	if (fstat(slot->lock_fd, &slot->cache_st)) {
+		close(tmp);
 		return errno;
+	}
 
 	/* Restore stdout */
-	if (dup2(tmp, STDOUT_FILENO) == -1)
+	if (dup2(tmp, STDOUT_FILENO) == -1) {
+		close(tmp);
 		return errno;
+	}
 
 	/* Close the temporary filedescriptor */
 	if (close(tmp))