diff options
author | Matthieu Moy <Matthieu.Moy@imag.fr> | 2012-02-06 17:24:52 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-02-06 11:05:36 -0800 |
commit | 33e42de0d21a8365496e904235bd32fd4659300d (patch) | |
tree | e048aaf750166c743afe369b5b78f8f22a27f39d /sha1_file.c | |
parent | 3ba7a065527a27f45659398e882feaa1165cbb4c (diff) | |
download | git-33e42de0d21a8365496e904235bd32fd4659300d.tar.gz |
fsck: give accurate error message on empty loose object filesmm/empty-loose-error-message
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.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sha1_file.c b/sha1_file.c index 25f6965294..797b0634ce 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); |