mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-11 04:28:26 +00:00
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.
This commit is contained in:
parent
a6ea108b56
commit
7cd4ba1b17
@ -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') {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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/*", "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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user