From 38b6e700272b387aaa959a5d362467e8bcd836b4 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Wed, 12 Apr 2017 08:09:08 +0200 Subject: [PATCH] fileops: fix leaking fd in `mmap_ro_file` When the `git_futils_mmap_ro_file` function encounters an error after the file has been opened, it will do a simple returns. Instead, we should close the opened file descriptor to avoid a leak. This commit fixes the issue. --- src/fileops.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/fileops.c b/src/fileops.c index f9552a5f8..a0a2795c6 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -304,15 +304,19 @@ int git_futils_mmap_ro_file(git_map *out, const char *path) if (fd < 0) return fd; - if ((len = git_futils_filesize(fd)) < 0) - return -1; + if ((len = git_futils_filesize(fd)) < 0) { + result = -1; + goto out; + } if (!git__is_sizet(len)) { giterr_set(GITERR_OS, "file `%s` too large to mmap", path); - return -1; + result = -1; + goto out; } result = git_futils_mmap_ro(out, fd, 0, (size_t)len); +out: p_close(fd); return result; }