From: Jeff King Date: Sat, 5 May 2018 00:03:35 +0000 (-0400) Subject: fsck: complain when .gitmodules is a symlink X-Git-Tag: v2.17.1~1^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b7b1fca175f1ed7933f361028c631b9ac86d868d;p=thirdparty%2Fgit.git fsck: complain when .gitmodules is a symlink We've recently forbidden .gitmodules to be a symlink in verify_path(). And it's an easy way to circumvent our fsck checks for .gitmodules content. So let's complain when we see it. Signed-off-by: Jeff King --- diff --git a/fsck.c b/fsck.c index 2eddfc3f74..9339f31513 100644 --- a/fsck.c +++ b/fsck.c @@ -63,6 +63,7 @@ static struct oidset gitmodules_done = OIDSET_INIT; FUNC(GITMODULES_BLOB, ERROR) \ FUNC(GITMODULES_PARSE, ERROR) \ FUNC(GITMODULES_NAME, ERROR) \ + FUNC(GITMODULES_SYMLINK, ERROR) \ /* warnings */ \ FUNC(BAD_FILEMODE, WARN) \ FUNC(EMPTY_NAME, WARN) \ @@ -576,8 +577,14 @@ static int fsck_tree(struct tree *item, struct fsck_options *options) has_dotgit |= is_hfs_dotgit(name) || is_ntfs_dotgit(name); has_zero_pad |= *(char *)desc.buffer == '0'; - if (is_hfs_dotgitmodules(name) || is_ntfs_dotgitmodules(name)) - oidset_insert(&gitmodules_found, oid); + if (is_hfs_dotgitmodules(name) || is_ntfs_dotgitmodules(name)) { + if (!S_ISLNK(mode)) + oidset_insert(&gitmodules_found, oid); + else + retval += report(options, &item->object, + FSCK_MSG_GITMODULES_SYMLINK, + ".gitmodules is a symbolic link"); + } if (update_tree_entry_gently(&desc)) { retval += report(options, &item->object, FSCK_MSG_BAD_TREE, "cannot be parsed as a tree"); diff --git a/t/t7415-submodule-names.sh b/t/t7415-submodule-names.sh index 51361c9e2d..a770d92a55 100755 --- a/t/t7415-submodule-names.sh +++ b/t/t7415-submodule-names.sh @@ -122,4 +122,33 @@ test_expect_success 'transfer.fsckObjects handles odd pack (index)' ' test_must_fail git -C dst.git index-pack --strict --stdin output && + grep gitmodulesSymlink output + ) +' + test_done