From: Thomas Rast Date: Tue, 28 Feb 2012 10:37:01 GMT Subject: [RFC PATCH 2b] parse_commit: refuse to load commit without \n\n separator Message-ID: <3f4c4b0656305bec08e87ad56ee3253b010a5a9d.1330425111.git.trast@student.ethz.ch> In-Reply-To: <010901fbfffe0f806bb19d556ebc1e512a4697f4.1330425111.git.trast@student.ethz.ch> 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 --- 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