mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 09:41:04 +00:00
commit: ignore multiple author fields
Some tools create multiple author fields. git is rather lax when parsing them, although fsck does complain about them. This means that they exist in the wild. As it's not too taxing to check for them, and there shouldn't be a noticeable slowdown when dealing with correct commits, add logic to skip over these extra fields when parsing the commit.
This commit is contained in:
parent
fa934fabf7
commit
65d69fe854
10
src/commit.c
10
src/commit.c
@ -309,6 +309,7 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
||||
const char *buffer_end = buffer_start + git_odb_object_size(odb_obj);
|
||||
git_oid parent_id;
|
||||
size_t header_len;
|
||||
git_signature dummy_sig;
|
||||
|
||||
buffer = buffer_start;
|
||||
|
||||
@ -337,6 +338,15 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
||||
if (git_signature__parse(commit->author, &buffer, buffer_end, "author ", '\n') < 0)
|
||||
return -1;
|
||||
|
||||
/* Some tools create multiple author fields, ignore the extra ones */
|
||||
while ((size_t)(buffer_end - buffer) >= strlen("author ") && !git__prefixcmp(buffer, "author ")) {
|
||||
if (git_signature__parse(&dummy_sig, &buffer, buffer_end, "author ", '\n') < 0)
|
||||
return -1;
|
||||
|
||||
git__free(dummy_sig.name);
|
||||
git__free(dummy_sig.email);
|
||||
}
|
||||
|
||||
/* Always parse the committer; we need the commit time */
|
||||
commit->committer = git__malloc(sizeof(git_signature));
|
||||
GITERR_CHECK_ALLOC(commit->committer);
|
||||
|
@ -262,6 +262,13 @@ gpgsig -----BEGIN PGP SIGNATURE-----\n\
|
||||
-----END PGP SIGNATURE-----\n\
|
||||
\n\
|
||||
a simple commit which works\n",
|
||||
/* some tools create two author entries */
|
||||
"tree 1810dff58d8a660512d4832e740f692884338ccd\n\
|
||||
author Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
|
||||
author Helpful Coworker <helpful@coworker> 1273848544 +0200\n\
|
||||
committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
|
||||
\n\
|
||||
a simple commit which works",
|
||||
};
|
||||
|
||||
static int parse_commit(git_commit **out, const char *buffer)
|
||||
|
Loading…
Reference in New Issue
Block a user