Re: [PATCH] remote-curl: ensure that URLs do not have a trailing slash
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:48:34
Tay Ray Chuan [off-list ref] writes:
quoted hunk
Signed-off-by: Tay Ray Chuan <redacted> --- remote-curl.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)diff --git a/remote-curl.c b/remote-curl.c index 0782756..0f21f8a 100644 --- a/remote-curl.c +++ b/remote-curl.c@@ -101,7 +101,8 @@ static struct discovery* discover_refs(const char *service) return last; free_discovery(last); - strbuf_addf(&buffer, "%s/info/refs", url); + end_url_with_slash(&buffer, url); + strbuf_addstr(&buffer, "info/refs"); if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) { is_http = 1; if (!strchr(url, '?'))@@ -120,7 +121,8 @@ static struct discovery* discover_refs(const char *service) strbuf_reset(&buffer); proto_git_candidate = 0; - strbuf_addf(&buffer, "%s/info/refs", url); + end_url_with_slash(&buffer, url); + strbuf_addstr(&buffer, "info/refs"); refs_url = strbuf_detach(&buffer, NULL); http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);@@ -511,7 +513,8 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads) rpc->out = client.out; strbuf_init(&rpc->result, 0); - strbuf_addf(&buf, "%s/%s", url, svc); + end_url_with_slash(&buf, url) + strbuf_addf(&buf, "%s", svc); rpc->service_url = strbuf_detach(&buf, NULL); strbuf_addf(&buf, "Content-Type: application/x-%s-request", svc);
The code does not look like it is making sure things do not have a trailing slash. For example, if svc has trailing slash, either %s/%s or strbuf_addf() would have the last character of svc in rpc->service_url. You are fixing something else. The new code avoids duplicated slashes in the middle if "url" can but does not necessarily end with a slash. Is that what you are trying to fix? I wonder if it makes more sense to make sure "url" always ends with a slash at the calling sites where it is obtained from either the end user or from the running environment...