summaryrefslogtreecommitdiff
path: root/sha1_file.c
diff options
context:
space:
mode:
authorMatthieu Moy <Matthieu.Moy@imag.fr>2012-02-06 16:24:52 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-02-06 19:05:36 (GMT)
commit33e42de0d21a8365496e904235bd32fd4659300d (patch)
treee048aaf750166c743afe369b5b78f8f22a27f39d /sha1_file.c
parent3ba7a065527a27f45659398e882feaa1165cbb4c (diff)
downloadgit-33e42de0d21a8365496e904235bd32fd4659300d.zip
git-33e42de0d21a8365496e904235bd32fd4659300d.tar.gz
git-33e42de0d21a8365496e904235bd32fd4659300d.tar.bz2
fsck: give accurate error message on empty loose object files
Since 3ba7a065527a (A loose object is not corrupt if it cannot be read due to EMFILE), "git fsck" on a repository with an empty loose object file complains with the error message fatal: failed to read object <sha1>: Invalid argument This comes from a failure of mmap on this empty file, which sets errno to EINVAL. Instead of calling xmmap on empty file, we display a clean error message ourselves, and return a NULL pointer. The new message is error: object file .git/objects/09/<rest-of-sha1> is empty fatal: loose object <sha1> (stored in .git/objects/09/<rest-of-sha1>) is corrupt The second line was already there before the regression in 3ba7a065527a, and the first is an additional message, that should help diagnosing the problem for the user. Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_file.c')
-rw-r--r--sha1_file.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c
index 25f6965..797b063 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1070,6 +1070,11 @@ static void *map_sha1_file(const unsigned char *sha1, unsigned long *size)
if (!fstat(fd, &st)) {
*size = xsize_t(st.st_size);
+ if (!*size) {
+ /* mmap() is forbidden on empty files */
+ error("object file %s is empty", sha1_file_name(sha1));
+ return NULL;
+ }
map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0);
}
close(fd);