diff options
| author | Scott J. Goldman <scottjg@github.com> | 2013-01-22 15:49:51 -0800 |
|---|---|---|
| committer | Scott J. Goldman <scottjg@github.com> | 2013-01-22 15:49:51 -0800 |
| commit | cb35094be3c1dbe369454118e801e703d70c4a33 (patch) | |
| tree | 39b48c5a56d0d0954c47394ebea1ea999e359171 | |
| parent | 2a707d0e24e206666626ae858e5ba618ffef0547 (diff) | |
| download | libgit2-cb35094be3c1dbe369454118e801e703d70c4a33.tar.gz | |
Allow peeled references without trailing newline at end of file
Also ammends one of the tag tests to make sure it's working.
| -rw-r--r-- | src/refs.c | 12 | ||||
| -rw-r--r-- | tests-clar/object/tag/read.c | 4 | ||||
| -rw-r--r-- | tests-clar/resources/bad_tag.git/packed-refs | 2 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/refs.c b/src/refs.c index 4934a0309..52e0adac6 100644 --- a/src/refs.c +++ b/src/refs.c @@ -328,7 +328,7 @@ static int packed_parse_peel( if (git__prefixcmp(tag_ref->name, GIT_REFS_TAGS_DIR) != 0) goto corrupt; - if (buffer + GIT_OID_HEXSZ >= buffer_end) + if (buffer + GIT_OID_HEXSZ > buffer_end) goto corrupt; /* Is this a valid object id? */ @@ -339,10 +339,14 @@ static int packed_parse_peel( if (*buffer == '\r') buffer++; - if (*buffer != '\n') - goto corrupt; + if (buffer != buffer_end) { + if (*buffer == '\n') + buffer++; + else + goto corrupt; + } - *buffer_out = buffer + 1; + *buffer_out = buffer; return 0; corrupt: diff --git a/tests-clar/object/tag/read.c b/tests-clar/object/tag/read.c index 53272e91c..6dab2a9a9 100644 --- a/tests-clar/object/tag/read.c +++ b/tests-clar/object/tag/read.c @@ -62,6 +62,7 @@ void test_object_tag_read__parse_without_tagger(void) git_tag *bad_tag; git_commit *commit; git_oid id, id_commit; + git_strarray ref_list; // TODO: This is a little messy cl_git_pass(git_repository_open(&bad_tag_repo, cl_fixture("bad_tag.git"))); @@ -81,6 +82,9 @@ void test_object_tag_read__parse_without_tagger(void) cl_assert(git_oid_cmp(&id_commit, git_commit_id(commit)) == 0); + cl_git_pass(git_reference_list(&ref_list, bad_tag_repo, GIT_REF_LISTALL)); + + git_strarray_free(&ref_list); git_tag_free(bad_tag); git_commit_free(commit); git_repository_free(bad_tag_repo); diff --git a/tests-clar/resources/bad_tag.git/packed-refs b/tests-clar/resources/bad_tag.git/packed-refs index f9fd2fd4a..9da16459b 100644 --- a/tests-clar/resources/bad_tag.git/packed-refs +++ b/tests-clar/resources/bad_tag.git/packed-refs @@ -1,3 +1,5 @@ # pack-refs with: peeled eda9f45a2a98d4c17a09d681d88569fa4ea91755 refs/tags/e90810b ^e90810b8df3e80c413d903f631643c716887138d +d3bacb8d3ff25876a961b1963b6515170d0151ab refs/tags/hello +^6dcf9bf7541ee10456529833502442f385010c3d
\ No newline at end of file |
