From bb45c57f94d3c7c96e78234e2a81393c0ced45a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 7 Mar 2013 16:38:44 +0100 Subject: [PATCH] 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(). --- src/refs.c | 3 +++ tests-clar/refs/lookup.c | 6 ++++++ 2 files changed, 9 insertions(+) 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;