Commit 6ba8a33d by Carlos Martín Nieto

refspec: make sure matching refspecs have src, dst and input strings

When we find out that we're dealing with a matching refspec, we set the
flag and return immediately. This leaves the strings as NULL, which
breaks the contract.

Assign these pointers to a string with the correct values.
parent c62ab5f5
...@@ -42,6 +42,12 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch) ...@@ -42,6 +42,12 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
*/ */
if (!is_fetch && rhs == lhs && rhs[1] == '\0') { if (!is_fetch && rhs == lhs && rhs[1] == '\0') {
refspec->matching = 1; refspec->matching = 1;
refspec->string = git__strdup(input);
GITERR_CHECK_ALLOC(refspec->string);
refspec->src = git__strdup("");
GITERR_CHECK_ALLOC(refspec->src);
refspec->dst = git__strdup("");
GITERR_CHECK_ALLOC(refspec->dst);
return 0; return 0;
} }
......
...@@ -146,3 +146,13 @@ void test_network_refspecs__invalid_reverse(void) ...@@ -146,3 +146,13 @@ void test_network_refspecs__invalid_reverse(void)
assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "master"); assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "master");
assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "refs/remotes/o/master"); assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "refs/remotes/o/master");
} }
void test_network_refspecs__matching(void)
{
git_refspec spec;
cl_git_pass(git_refspec__parse(&spec, ":", false));
cl_assert_equal_s(":", spec.string);
cl_assert_equal_s("", spec.src);
cl_assert_equal_s("", spec.dst);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment