summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2013-04-15 06:11:29 -0700
committerVicent Martí <vicent@github.com>2013-04-15 06:11:29 -0700
commit2d2260da41ddf22fd5c5f0c39ce16fad1548f29e (patch)
tree2c41d4ca3f9f27bf105ea0d9819f15b541d6c646
parent041ed367ab026583d6607b5029a0c63146a90215 (diff)
parent0efae3b22e7472b95174632c323137a2b21b9c51 (diff)
downloadlibgit2-2d2260da41ddf22fd5c5f0c39ce16fad1548f29e.tar.gz
Merge pull request #1467 from carlosmn/commit-parse
commit: correctly detect the start of the commit message
-rw-r--r--src/commit.c4
-rw-r--r--tests-clar/commit/parse.c29
2 files changed, 30 insertions, 3 deletions
diff --git a/src/commit.c b/src/commit.c
index e2d3d346b..c7b83ed43 100644
--- a/src/commit.c
+++ b/src/commit.c
@@ -189,8 +189,8 @@ int git_commit__parse_buffer(git_commit *commit, const void *data, size_t len)
buffer = eoln;
}
- /* skip blank lines */
- while (buffer < buffer_end - 1 && *buffer == '\n')
+ /* buffer is now at the end of the header, double-check and move forward into the message */
+ if (buffer < buffer_end && *buffer == '\n')
buffer++;
/* parse commit message */
diff --git a/tests-clar/commit/parse.c b/tests-clar/commit/parse.c
index 95c628588..b99d27991 100644
--- a/tests-clar/commit/parse.c
+++ b/tests-clar/commit/parse.c
@@ -297,7 +297,7 @@ void test_commit_parse__entire_commit(void)
);
if (!i)
- cl_assert_equal_s("\n", git_commit_message(commit));
+ cl_assert_equal_s("", git_commit_message(commit));
else
cl_assert(git__prefixcmp(
git_commit_message(commit), "a simple commit which works") == 0);
@@ -366,3 +366,30 @@ void test_commit_parse__details0(void) {
}
}
+void test_commit_parse__leading_lf(void)
+{
+ git_commit *commit;
+ const char *buffer =
+"tree 1810dff58d8a660512d4832e740f692884338ccd\n\
+parent e90810b8df3e80c413d903f631643c716887138d\n\
+author Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
+committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
+\n\
+\n\
+\n\
+This commit has a few LF at the start of the commit message";
+ const char *message =
+"\n\
+\n\
+This commit has a few LF at the start of the commit message";
+
+ commit = (git_commit*)git__malloc(sizeof(git_commit));
+ memset(commit, 0x0, sizeof(git_commit));
+ commit->object.repo = g_repo;
+
+ cl_git_pass(git_commit__parse_buffer(commit, buffer, strlen(buffer)));
+
+ cl_assert_equal_s(message, git_commit_message(commit));
+
+ git_commit__free(commit);
+}