diff options
author | Patrick Steinhardt <ps@pks.im> | 2017-04-12 08:09:08 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2017-04-12 08:09:08 +0200 |
commit | 38b6e700272b387aaa959a5d362467e8bcd836b4 (patch) | |
tree | 0d33bd0e926d417e8bac0cb30d4baf594dc3c28d | |
parent | e572b63121dccf71054beeb62d4b18e618379049 (diff) | |
download | libgit2-38b6e700272b387aaa959a5d362467e8bcd836b4.tar.gz |
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.
-rw-r--r-- | src/fileops.c | 10 |
1 files 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; } |