summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commit.c4
-rw-r--r--src/signature.c2
-rw-r--r--src/tag.c17
3 files changed, 12 insertions, 11 deletions
diff --git a/src/commit.c b/src/commit.c
index 0ee3854c4..ced457ecc 100644
--- a/src/commit.c
+++ b/src/commit.c
@@ -221,10 +221,10 @@ int git_commit__parse_buffer(git_commit *commit, const void *data, size_t len)
}
/* parse commit message */
- while (buffer < buffer_end && *buffer == '\n')
+ while (buffer < buffer_end - 1 && *buffer == '\n')
buffer++;
- if (buffer < buffer_end) {
+ if (buffer <= buffer_end) {
commit->message = git__strndup(buffer, buffer_end - buffer);
if (!commit->message)
return GIT_ENOMEM;
diff --git a/src/signature.c b/src/signature.c
index ebb56d7ab..388e8d9c9 100644
--- a/src/signature.c
+++ b/src/signature.c
@@ -279,7 +279,7 @@ int git_signature__parse(git_signature *sig, const char **buffer_out,
if ((name_end = strchr(buffer, '<')) == NULL)
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse signature. Cannot find '<' in signature");
- if ((email_end = strchr(buffer, '>')) == NULL)
+ if ((email_end = strchr(name_end, '>')) == NULL)
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse signature. Cannot find '>' in signature");
if (email_end < name_end)
diff --git a/src/tag.c b/src/tag.c
index fc9f8b5e4..ba75104ef 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -122,14 +122,15 @@ static int parse_tag_buffer(git_tag *tag, const char *buffer, const char *buffer
buffer = search + 1;
- tag->tagger = git__malloc(sizeof(git_signature));
- if (tag->tagger == NULL)
- return GIT_ENOMEM;
-
- if ((error = git_signature__parse(tag->tagger, &buffer, buffer_end, "tagger ", '\n')) != 0) {
- free(tag->tag_name);
- git_signature_free(tag->tagger);
- return git__rethrow(error, "Failed to parse tag");
+ tag->tagger = NULL;
+ if (*buffer != '\n') {
+ tag->tagger = git__malloc(sizeof(git_signature));
+ if (tag->tagger == NULL)
+ return GIT_ENOMEM;
+
+ if ((error = git_signature__parse(tag->tagger, &buffer, buffer_end, "tagger ", '\n') != 0)) {
+ return git__rethrow(error, "Failed to parse tag");
+ }
}
if( *buffer != '\n' )