diff options
author | Russell Belfer <rb@github.com> | 2013-01-31 13:20:20 -0800 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2013-01-31 13:20:20 -0800 |
commit | 7c32a0b5f7cc3eeb0ea1f12e6d2bc0839a7f28ef (patch) | |
tree | eef7f0e6b005913543a88be1c6db60a449197069 | |
parent | 5f9f69d983d7ebc2d9d29cf295e86f32ab12906d (diff) | |
parent | e5ef0f18141409fc932d2c9cc0a42b769a880927 (diff) | |
download | libgit2-7c32a0b5f7cc3eeb0ea1f12e6d2bc0839a7f28ef.tar.gz |
Merge pull request #1300 from carlosmn/ref-leading-slash
Crash when resolving a ref starting with "/"
-rw-r--r-- | src/refs.c | 5 | ||||
-rw-r--r-- | tests-clar/refs/isvalidname.c | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/refs.c b/src/refs.c index 52e0adac6..e75f51001 100644 --- a/src/refs.c +++ b/src/refs.c @@ -1691,6 +1691,11 @@ int git_reference__normalize_name( segments_count++; } + /* This means that there's a leading slash in the refname */ + if (segment_len == 0 && segments_count == 0) { + goto cleanup; + } + if (current[segment_len] == '\0') break; diff --git a/tests-clar/refs/isvalidname.c b/tests-clar/refs/isvalidname.c index 3cc838d34..b61a02360 100644 --- a/tests-clar/refs/isvalidname.c +++ b/tests-clar/refs/isvalidname.c @@ -10,6 +10,8 @@ void test_refs_isvalidname__can_detect_invalid_formats(void) cl_assert_equal_i(false, git_reference_is_valid_name("_NO_LEADING_UNDERSCORE")); cl_assert_equal_i(false, git_reference_is_valid_name("HEAD/aa")); cl_assert_equal_i(false, git_reference_is_valid_name("lower_case")); + cl_assert_equal_i(false, git_reference_is_valid_name("/stupid/name/master")); + cl_assert_equal_i(false, git_reference_is_valid_name("/")); cl_assert_equal_i(false, git_reference_is_valid_name("")); } |