Merge branch 'il/loosen-remote-helper-names'

* il/loosen-remote-helper-names:
  Allow '+', '-' and '.' in remote helper names
This commit is contained in:
Junio C Hamano 2010-03-07 12:47:15 -08:00
commit 92db3fb95c

View file

@ -870,6 +870,21 @@ static int is_file(const char *url)
return S_ISREG(buf.st_mode);
}
static int isurlschemechar(int first_flag, int ch)
{
/*
* The set of valid URL schemes, as per STD66 (RFC3986) is
* '[A-Za-z][A-Za-z0-9+.-]*'. But use sightly looser check
* of '[A-Za-z0-9][A-Za-z0-9+.-]*' because earlier version
* of check used '[A-Za-z0-9]+' so not to break any remote
* helpers.
*/
int alphanumeric, special;
alphanumeric = ch > 0 && isalnum(ch);
special = ch == '+' || ch == '-' || ch == '.';
return alphanumeric || (!first_flag && special);
}
static int is_url(const char *url)
{
const char *url2, *first_slash;
@ -894,7 +909,7 @@ static int is_url(const char *url)
*/
url2 = url;
while (url2 < first_slash - 1) {
if (!isalnum((unsigned char)*url2))
if (!isurlschemechar(url2 == url, (unsigned char)*url2))
return 0;
url2++;
}
@ -928,7 +943,7 @@ struct transport *transport_get(struct remote *remote, const char *url)
if (url) {
const char *p = url;
while (isalnum(*p))
while (isurlschemechar(p == url, *p))
p++;
if (!prefixcmp(p, "::"))
helper = xstrndup(url, p - url);