[PATCH v4] Do not decode url protocol.
From: Pascal Obry <hidden>
Date: 2016-06-15 22:48:59
When using the protocol git+ssh:// for example we do not want to decode the '+' as a space. The url decoding must take place only for the server name and parameters. This fixes a regression introduced in 9d2e942. --- url.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-) Ok, so this is the fourth version of this patch. Thanks again Matthieu for the review. I think this time I got the place for the message right :) Anyway, I think this time we properly skip the protocol decoding when needed.
diff --git a/url.c b/url.c
index cd32b92..0eb7fb3 100644
--- a/url.c
+++ b/url.c@@ -67,12 +67,23 @@ static int url_decode_char(const char *q) return val; } -static char *url_decode_internal(const char **query, const char *stop_at) +static char *url_decode_internal(const char **query, const char *stop_at, + int with_protocol) { const char *q = *query; + const char *first_slash; struct strbuf out; strbuf_init(&out, 16); + + /* Skip protocol if present. */ + if (with_protocol) { + first_slash = strchr(*query, '/'); + + while (q < first_slash) + strbuf_addch(&out, *q++); + } + do { unsigned char c = *q;
@@ -104,15 +115,15 @@ static char *url_decode_internal(const char**query, const char *stop_at)
char *url_decode(const char *url)
{
- return url_decode_internal(&url, NULL);
+ return url_decode_internal(&url, NULL, 1);
}
char *url_decode_parameter_name(const char **query)
{
- return url_decode_internal(query, "&=");
+ return url_decode_internal(query, "&=", 0);
}
char *url_decode_parameter_value(const char **query)
{
- return url_decode_internal(query, "&");
+ return url_decode_internal(query, "&", 0);
}
--
1.7.1.426.gb436.dirty
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net - http://v2p.fr.eu.org
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver keys.gnupg.net --recv-key F949BD3B