diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2015-06-03 15:51:59 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-06-08 19:35:41 +0200 |
commit | 501cf47cddfbf8040b6f9b8ac06d13094a70f729 (patch) | |
tree | 64d8e2187d0dc508da8b916a205b8cfe6d893418 /refs.c | |
parent | read_loose_refs(): simplify function logic (diff) | |
download | git-501cf47cddfbf8040b6f9b8ac06d13094a70f729.tar.xz git-501cf47cddfbf8040b6f9b8ac06d13094a70f729.zip |
read_loose_refs(): treat NULL_SHA1 loose references as broken
NULL_SHA1 is used to indicate an "invalid object name" throughout our
code (and the code of other git implementations), so it is vastly more
likely that an on-disk reference was set to this value due to a
software bug than that NULL_SHA1 is the legitimate SHA-1 of an actual
object. Therefore, if a loose reference has the value NULL_SHA1,
consider it to be broken.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r-- | refs.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -1297,6 +1297,16 @@ static void read_loose_refs(const char *dirname, struct ref_dir *dir) if (!read_ok) { hashclr(sha1); flag |= REF_ISBROKEN; + } else if (is_null_sha1(sha1)) { + /* + * It is so astronomically unlikely + * that NULL_SHA1 is the SHA-1 of an + * actual object that we consider its + * appearance in a loose reference + * file to be repo corruption + * (probably due to a software bug). + */ + flag |= REF_ISBROKEN; } if (check_refname_format(refname.buf, |