From 1081d909456b8149c8b7fd5eb16d39c6a55c4078 Mon Sep 17 00:00:00 2001 From: Colin Timmermans Date: Fri, 5 Nov 2010 18:04:46 +0200 Subject: [PATCH] Fix parsing of commits that have no newlines in the message. --- src/commit.c | 7 ++++--- tests/t0401-parse.c | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/commit.c b/src/commit.c index 4dbd7719a..08243f5c4 100644 --- a/src/commit.c +++ b/src/commit.c @@ -176,14 +176,15 @@ int commit_parse_buffer(git_commit *commit, void *data, size_t len, unsigned int char *line_end; size_t message_len = buffer_end - buffer; - /* Short message */ + /* Long message */ message_len = buffer_end - buffer; commit->message = git__malloc(message_len + 1); memcpy(commit->message, buffer, message_len); commit->message[message_len] = 0; - /* Long message */ - line_end = memchr(buffer, '\n', buffer_end - buffer); + /* Short message */ + if((line_end = memchr(buffer, '\n', buffer_end - buffer)) == NULL) + line_end = buffer_end; message_len = line_end - buffer; commit->message_short = git__malloc(message_len + 1); diff --git a/tests/t0401-parse.c b/tests/t0401-parse.c index 0ce59fc30..331d3895f 100644 --- a/tests/t0401-parse.c +++ b/tests/t0401-parse.c @@ -71,11 +71,19 @@ committer Vicent Marti 1273848544 +0200\n\ \n\ a simple commit which works\n", -/* simple commit, 1 parents */ +/* simple commit, no parent, no newline in message */ "tree 1810dff58d8a660512d4832e740f692884338ccd\n\ author Vicent Marti 1273848544 +0200\n\ committer Vicent Marti 1273848544 +0200\n\ \n\ +a simple commit which works", + +/* simple commit, 1 parent */ +"tree 1810dff58d8a660512d4832e740f692884338ccd\n\ +parent e90810b8df3e80c413d903f631643c716887138d\n\ +author Vicent Marti 1273848544 +0200\n\ +committer Vicent Marti 1273848544 +0200\n\ +\n\ a simple commit which works\n", }; @@ -210,7 +218,7 @@ BEGIN_TEST(parse_person_test) "author "); #undef TEST_PERSON_PASS -#undef TESt_PERSON_FAIL +#undef TEST_PERSON_FAIL END_TEST @@ -248,6 +256,16 @@ BEGIN_TEST(parse_buffer_test) memset(commit, 0x0, sizeof(git_commit)); commit->object.repo = repo; + must_pass(commit_parse_buffer( + commit, + test_commits_working[i], + strlen(test_commits_working[i]), + 0x0) + ); + + memset(commit, 0x0, sizeof(git_commit)); + commit->object.repo = repo; + must_pass(commit_parse_buffer( commit, test_commits_working[i],