diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commit.c | 4 | ||||
-rw-r--r-- | src/signature.c | 2 | ||||
-rw-r--r-- | src/tag.c | 17 |
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) @@ -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' ) |