diff options
author | Carlos Martín Nieto <cmn@elego.de> | 2013-03-07 16:38:44 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@elego.de> | 2013-03-07 16:38:44 +0100 |
commit | bb45c57f94d3c7c96e78234e2a81393c0ced45a0 (patch) | |
tree | e501f5be5296ce8d894e69867eb511a6be81fa27 | |
parent | 9952f24e6cc71ef5ecd13831f783e308aae97c36 (diff) | |
download | libgit2-bb45c57f94d3c7c96e78234e2a81393c0ced45a0.tar.gz |
refs: explicitly catch leading slashes
It's somewhat common to try to write "/refs/tags/something". There is
no easy way to catch it during the main body of the function, as there
is no way to distinguish whether it's a leading slash or a double
slash somewhere in the middle.
Catch this at the beginning so we don't trigger the assert in
is_all_caps_and_underscore().
-rw-r--r-- | src/refs.c | 3 | ||||
-rw-r--r-- | tests-clar/refs/lookup.c | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/refs.c b/src/refs.c index 113cadad5..dd3dd64b1 100644 --- a/src/refs.c +++ b/src/refs.c @@ -1667,6 +1667,9 @@ int git_reference__normalize_name( process_flags = flags; current = (char *)name; + if (*current == '/') + goto cleanup; + if (normalize) git_buf_clear(buf); diff --git a/tests-clar/refs/lookup.c b/tests-clar/refs/lookup.c index 11fd68f90..0dbebc5c2 100644 --- a/tests-clar/refs/lookup.c +++ b/tests-clar/refs/lookup.c @@ -32,6 +32,12 @@ void test_refs_lookup__with_resolve(void) git_reference_free(a); } +void test_refs_lookup__invalid_name(void) +{ + git_oid oid; + cl_git_fail(git_reference_name_to_id(&oid, g_repo, "/refs/tags/point_to_blob")); +} + void test_refs_lookup__oid(void) { git_oid tag, expected; |