[RFC PATCH 2b] parse_commit: refuse to load commit without \n\n separator

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]