Skip to content

Commit 9daba9f

Browse files
committed
fileops: do not overwrite correct error message on mmap
When executing `git_futils_mmap_ro_file`, we first try to guess whether the file is mmapable at all. Part of this check is whether the file is too large to be mmaped, which can be true on systems with 32 bit `size_t` types. The check is performed by first getting the file size wtih `git_futils_filesize` and then checking whether the returned size can be represented as `size_t`, returning an error if so. While this test also catches the case where the function returned an error (as `-1` is not representable by `size_t`), we will set the misleading error message "file too large to mmap". But in fact, a negative return value from `git_futils_filesize` will be caused by the inability to fstat the file. Fix the error message by handling negative return values separately and not overwriting the error message in that case.
1 parent 756138e commit 9daba9f

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/fileops.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ int git_futils_mmap_ro_file(git_map *out, const char *path)
304304
if (fd < 0)
305305
return fd;
306306

307-
len = git_futils_filesize(fd);
307+
if ((len = git_futils_filesize(fd)) < 0)
308+
return -1;
309+
308310
if (!git__is_sizet(len)) {
309311
giterr_set(GITERR_OS, "file `%s` too large to mmap", path);
310312
return -1;

0 commit comments

Comments
 (0)