A commit object consists of a series of headers, terminated by a blank line (\n\n), followed by the message. Refuse to parse a commit which does not contain this \n\n. This also lets git-fsck detect the breakage. Signed-off-by: Thomas Rast <trast@xxxxxxxxxxxxxxx> --- This is the more drastic approach compared to 2a. Since the code in pretty.c was broken given such input, I would favor this. It does, however, remove the possibility of fixing up such a broken commit with the tools git provides (other than resorting to git-hash-object and git-replace). commit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commit.c b/commit.c index 4b39c19..502675c 100644 --- a/commit.c +++ b/commit.c @@ -265,6 +265,9 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s if (get_sha1_hex(bufptr + 5, parent) < 0) return error("bad tree pointer in commit %s", sha1_to_hex(item->object.sha1)); + if (!memmem(bufptr, size, "\n\n", 2)) + return error("commit object %s is missing \\n\\n separator", + sha1_to_hex(item->object.sha1)); item->tree = lookup_tree(parent); bufptr += 46; /* "tree " + "hex sha1" + "\n" */ pptr = &item->parents; -- 1.7.9.2.467.g7fee4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html