summaryrefslogtreecommitdiff
path: root/fsck.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-05-17 21:38:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-05-17 21:38:34 (GMT)
commit6bfb7de89e32117a59cbafdb2dfeeac633121df0 (patch)
treed5cbac10b25afbff1e74d2ad17c3818d44e2f2e7 /fsck.c
parentef687dbd9da6e44ffcfeef3216b531d22d5e43d4 (diff)
parent6d2d780f6359df424a625a51f09da80ab6dc1ef8 (diff)
downloadgit-6bfb7de89e32117a59cbafdb2dfeeac633121df0.zip
git-6bfb7de89e32117a59cbafdb2dfeeac633121df0.tar.gz
git-6bfb7de89e32117a59cbafdb2dfeeac633121df0.tar.bz2
Merge branch 'jc/fsck-nul-in-commit'
"git fsck" learned to catch NUL byte in a commit object as potential error and warn. * jc/fsck-nul-in-commit: fsck: detect and warn a commit with embedded NUL fsck_commit_buffer(): do not special case the last validation
Diffstat (limited to 'fsck.c')
-rw-r--r--fsck.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/fsck.c b/fsck.c
index 92b17f5..0531545 100644
--- a/fsck.c
+++ b/fsck.c
@@ -59,6 +59,7 @@
FUNC(HAS_DOTGIT, WARN) \
FUNC(NULL_SHA1, WARN) \
FUNC(ZERO_PADDED_FILEMODE, WARN) \
+ FUNC(NUL_IN_COMMIT, WARN) \
/* infos (reported as warnings, but ignored by default) */ \
FUNC(BAD_TAG_NAME, INFO) \
FUNC(MISSING_TAGGER_ENTRY, INFO)
@@ -610,6 +611,7 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer,
struct commit_graft *graft;
unsigned parent_count, parent_line_count = 0, author_count;
int err;
+ const char *buffer_begin = buffer;
if (verify_headers(buffer, size, &commit->object, options))
return -1;
@@ -666,9 +668,17 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer,
err = fsck_ident(&buffer, &commit->object, options);
if (err)
return err;
- if (!commit->tree)
- return report(options, &commit->object, FSCK_MSG_BAD_TREE, "could not load commit's tree %s", sha1_to_hex(tree_sha1));
-
+ if (!commit->tree) {
+ err = report(options, &commit->object, FSCK_MSG_BAD_TREE, "could not load commit's tree %s", sha1_to_hex(tree_sha1));
+ if (err)
+ return err;
+ }
+ if (memchr(buffer_begin, '\0', size)) {
+ err = report(options, &commit->object, FSCK_MSG_NUL_IN_COMMIT,
+ "NUL byte in the commit object body");
+ if (err)
+ return err;
+ }
return 0;
}