Merge branch 'jk/maint-null-in-trees' into maint-1.7.11
"git diff" had a confusion between taking data from a path in the
working tree and taking data from an object that happens to have
name 0{40} recorded in a tree.
* jk/maint-null-in-trees:
fsck: detect null sha1 in tree entries
do not write null sha1s to on-disk index
diff: do not use null sha1 as a sentinel value
This commit is contained in:
8
fsck.c
8
fsck.c
@ -139,6 +139,7 @@ static int verify_ordered(unsigned mode1, const char *name1, unsigned mode2, con
|
||||
static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
|
||||
{
|
||||
int retval;
|
||||
int has_null_sha1 = 0;
|
||||
int has_full_path = 0;
|
||||
int has_empty_name = 0;
|
||||
int has_zero_pad = 0;
|
||||
@ -157,9 +158,12 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
|
||||
while (desc.size) {
|
||||
unsigned mode;
|
||||
const char *name;
|
||||
const unsigned char *sha1;
|
||||
|
||||
tree_entry_extract(&desc, &name, &mode);
|
||||
sha1 = tree_entry_extract(&desc, &name, &mode);
|
||||
|
||||
if (is_null_sha1(sha1))
|
||||
has_null_sha1 = 1;
|
||||
if (strchr(name, '/'))
|
||||
has_full_path = 1;
|
||||
if (!*name)
|
||||
@ -207,6 +211,8 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
|
||||
}
|
||||
|
||||
retval = 0;
|
||||
if (has_null_sha1)
|
||||
retval += error_func(&item->object, FSCK_WARN, "contains entries pointing to null sha1");
|
||||
if (has_full_path)
|
||||
retval += error_func(&item->object, FSCK_WARN, "contains full pathnames");
|
||||
if (has_empty_name)
|
||||
|
||||
Reference in New Issue
Block a user