Michael Haggerty <mhag...@alum.mit.edu> writes:

>> diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
>> index 6207ecd..a3e3fa3 100644
>> --- a/builtin/fetch-pack.c
>> +++ b/builtin/fetch-pack.c
>> @@ -546,7 +546,7 @@ static void filter_refs(struct ref **refs, int nr_match, 
>> char **match)
>>      for (ref = *refs; ref; ref = next) {
>>              next = ref->next;
>>              if (!memcmp(ref->name, "refs/", 5) &&
>> -                check_refname_format(ref->name + 5, 0))
>> +                check_refname_format(ref->name, 0))
>>                      ; /* trash */
>>              else if (args.fetch_all &&
>>                       (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
> I understand that you didn't introduce this code, but it seems like a
> suspicious combination of conditions:
>     if ((ref->name starts with "refs/")
>         and (ref->name has invalid format))

This protects us from getting contaminated by bogus ref under refs/
when running "fetch refs/heads/*:refs/remotes/origin/*" no?

The remote side can also throw phony "I have this object, too, but
not at a particular ref---this entry is only to let you know I have
it, so that we can negotiate minimal transfer better" entries that
are labelled with strings that do not begin with "refs/" and do not
pass check_refname_format() (and because they are not refs, they do
not have to pass the test) at us, and we do not want to filter them
out in this function.  But we do not want anything that is malformed
under "refs/".

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to