diff options
author | Christian Hesse | 2015-10-10 16:56:28 +0200 |
---|---|---|
committer | Jason A. Donenfeld | 2015-10-10 21:41:04 +0200 |
commit | 76dc7a3371e487fdc9de7b3b4c991fe370598f0e (patch) | |
tree | d64fec2f225fec6c89f8a4cbe48b23e04750ef04 /cache.c | |
parent | ed5dccbeaab5c8b30e1c2fe8890fa098537a2621 (diff) | |
download | cgit-76dc7a3371e487fdc9de7b3b4c991fe370598f0e.tar cgit-76dc7a3371e487fdc9de7b3b4c991fe370598f0e.tar.gz cgit-76dc7a3371e487fdc9de7b3b4c991fe370598f0e.zip |
cache: fix resource leak: close file handle before return
Coverity-id: 13910
Signed-off-by: Christian Hesse <mail@eworm.de>
Diffstat (limited to 'cache.c')
-rw-r--r-- | cache.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -215,19 +215,25 @@ static int fill_slot(struct cache_slot *slot) 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)) |