Merge branch 'tr/maint-no-unquote-plus'
* tr/maint-no-unquote-plus: Do not unquote + into ' ' in URLsmaint
commit
d7cc7c971f
|
@ -178,8 +178,14 @@ test_expect_success 'clone respects global branch.autosetuprebase' '
|
||||||
|
|
||||||
test_expect_success 'respect url-encoding of file://' '
|
test_expect_success 'respect url-encoding of file://' '
|
||||||
git init x+y &&
|
git init x+y &&
|
||||||
test_must_fail git clone "file://$PWD/x+y" xy-url &&
|
git clone "file://$PWD/x+y" xy-url-1 &&
|
||||||
git clone "file://$PWD/x%2By" xy-url
|
git clone "file://$PWD/x%2By" xy-url-2
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'do not query-string-decode + in URLs' '
|
||||||
|
rm -rf x+y &&
|
||||||
|
git init "x y" &&
|
||||||
|
test_must_fail git clone "file://$PWD/x+y" xy-no-plus
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'do not respect url-encoding of non-url path' '
|
test_expect_success 'do not respect url-encoding of non-url path' '
|
||||||
|
|
11
url.c
11
url.c
|
@ -67,7 +67,8 @@ static int url_decode_char(const char *q)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *url_decode_internal(const char **query, const char *stop_at, struct strbuf *out)
|
static char *url_decode_internal(const char **query, const char *stop_at,
|
||||||
|
struct strbuf *out, int decode_plus)
|
||||||
{
|
{
|
||||||
const char *q = *query;
|
const char *q = *query;
|
||||||
|
|
||||||
|
@ -90,7 +91,7 @@ static char *url_decode_internal(const char **query, const char *stop_at, struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '+')
|
if (decode_plus && c == '+')
|
||||||
strbuf_addch(out, ' ');
|
strbuf_addch(out, ' ');
|
||||||
else
|
else
|
||||||
strbuf_addch(out, c);
|
strbuf_addch(out, c);
|
||||||
|
@ -110,17 +111,17 @@ char *url_decode(const char *url)
|
||||||
strbuf_add(&out, url, colon - url);
|
strbuf_add(&out, url, colon - url);
|
||||||
url = colon;
|
url = colon;
|
||||||
}
|
}
|
||||||
return url_decode_internal(&url, NULL, &out);
|
return url_decode_internal(&url, NULL, &out, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *url_decode_parameter_name(const char **query)
|
char *url_decode_parameter_name(const char **query)
|
||||||
{
|
{
|
||||||
struct strbuf out = STRBUF_INIT;
|
struct strbuf out = STRBUF_INIT;
|
||||||
return url_decode_internal(query, "&=", &out);
|
return url_decode_internal(query, "&=", &out, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *url_decode_parameter_value(const char **query)
|
char *url_decode_parameter_value(const char **query)
|
||||||
{
|
{
|
||||||
struct strbuf out = STRBUF_INIT;
|
struct strbuf out = STRBUF_INIT;
|
||||||
return url_decode_internal(query, "&", &out);
|
return url_decode_internal(query, "&", &out, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue