All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] remote-curl: ensure that URLs do not have a trailing slash
@ 2010-04-07 14:51 Tay Ray Chuan
  2010-04-07 15:12 ` Junio C Hamano
  0 siblings, 1 reply; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-07 14:51 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Shawn O. Pearce, Junio C Hamano

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 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);
-- 
1.7.0.20.gcb44ed

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] remote-curl: ensure that URLs do not have a trailing slash
  2010-04-07 14:51 [PATCH] remote-curl: ensure that URLs do not have a trailing slash Tay Ray Chuan
@ 2010-04-07 15:12 ` Junio C Hamano
  2010-04-07 15:57   ` Tay Ray Chuan
  0 siblings, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2010-04-07 15:12 UTC (permalink / raw)
  To: Tay Ray Chuan; +Cc: Git Mailing List, Shawn O. Pearce, Junio C Hamano

Tay Ray Chuan <rctay89@gmail.com> writes:

> Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
> ---
>  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...

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] remote-curl: ensure that URLs do not have a trailing  slash
  2010-04-07 15:12 ` Junio C Hamano
@ 2010-04-07 15:57   ` Tay Ray Chuan
  2010-04-07 15:58     ` [PATCH v2 1/2] http: make end_url_with_slash() public Tay Ray Chuan
  2010-04-07 16:01     ` [PATCH v2 resend " Tay Ray Chuan
  0 siblings, 2 replies; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-07 15:57 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List, Shawn O. Pearce

Hi,

On Wed, Apr 7, 2010 at 11:12 PM, Junio C Hamano <gitster@pobox.com> wrote:
> 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?

the commit message is misleading, yes. I'll have another go at it.

>  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...

Good idea.

-- 
Cheers,
Ray Chuan

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/2] http: make end_url_with_slash() public
  2010-04-07 15:57   ` Tay Ray Chuan
@ 2010-04-07 15:58     ` Tay Ray Chuan
  2010-04-07 16:01     ` [PATCH v2 resend " Tay Ray Chuan
  1 sibling, 0 replies; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-07 15:58 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Shawn O. Pearce, Junio C Hamano

---
 http.c |    2 +-
 http.h |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/http.c b/http.c
index 51253e1..07a03fd 100644
--- a/http.c
+++ b/http.c
@@ -720,7 +720,7 @@ static inline int hex(int v)
 		return 'A' + v - 10;
 }
 
-static void end_url_with_slash(struct strbuf *buf, const char *url)
+void end_url_with_slash(struct strbuf *buf, const char *url)
 {
 	strbuf_addstr(buf, url);
 	if (buf->len && buf->buf[buf->len - 1] != '/')
diff --git a/http.h b/http.h
index 2dd03e8..37a6a6a 100644
--- a/http.h
+++ b/http.h
@@ -117,6 +117,7 @@ extern void append_remote_object_url(struct strbuf *buf, const char *url,
 				     int only_two_digit_prefix);
 extern char *get_remote_object_url(const char *url, const char *hex,
 				   int only_two_digit_prefix);
+extern void end_url_with_slash(struct strbuf *buf, const char *url);
 
 /* Options for http_request_*() */
 #define HTTP_NO_CACHE		1
-- 
1.6.6.1368.g82eeb


>From 38c2aba1e77591d9cd57790d9a993f59659496ae Mon Sep 17 00:00:00 2001
From: Tay Ray Chuan <rctay89@gmail.com>
Date: Wed, 7 Apr 2010 23:44:01 +0800
Subject: [PATCH v2 2/2] remote-curl: ensure that URLs have a trailing slash

---
 remote-curl.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 0782756..ae14137 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -9,6 +9,10 @@
 #include "sideband.h"
 
 static struct remote *remote;
+
+/* At assignment-time, we append a trailing slash; always use this as
+ * if it ends with a slash.
+ */
 static const char *url;
 
 struct options {
@@ -101,7 +105,7 @@ static struct discovery* discover_refs(const char *service)
 		return last;
 	free_discovery(last);
 
-	strbuf_addf(&buffer, "%s/info/refs", url);
+	strbuf_addf(&buffer, "%sinfo/refs", url);
 	if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) {
 		is_http = 1;
 		if (!strchr(url, '?'))
@@ -120,7 +124,7 @@ static struct discovery* discover_refs(const char *service)
 		strbuf_reset(&buffer);
 
 		proto_git_candidate = 0;
-		strbuf_addf(&buffer, "%s/info/refs", url);
+		strbuf_addf(&buffer, "%sinfo/refs", url);
 		refs_url = strbuf_detach(&buffer, NULL);
 
 		http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
@@ -511,7 +515,7 @@ 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);
+	strbuf_addf(&buf, "%s%s", url, svc);
 	rpc->service_url = strbuf_detach(&buf, NULL);
 
 	strbuf_addf(&buf, "Content-Type: application/x-%s-request", svc);
@@ -800,11 +804,13 @@ int main(int argc, const char **argv)
 	remote = remote_get(argv[1]);
 
 	if (argc > 2) {
-		url = argv[2];
+		end_url_with_slash(&buf, argv[2]);
 	} else {
-		url = remote->url[0];
+		end_url_with_slash(&buf, remote->url[0]);
 	}
 
+	url = strbuf_detach(&buf, NULL);
+
 	http_init(remote);
 
 	do {
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 resend 1/2] http: make end_url_with_slash() public
  2010-04-07 15:57   ` Tay Ray Chuan
  2010-04-07 15:58     ` [PATCH v2 1/2] http: make end_url_with_slash() public Tay Ray Chuan
@ 2010-04-07 16:01     ` Tay Ray Chuan
  2010-04-07 16:01       ` [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan
  1 sibling, 1 reply; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-07 16:01 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Shawn O. Pearce, Junio C Hamano

---
 http.c |    2 +-
 http.h |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/http.c b/http.c
index 51253e1..07a03fd 100644
--- a/http.c
+++ b/http.c
@@ -720,7 +720,7 @@ static inline int hex(int v)
 		return 'A' + v - 10;
 }
 
-static void end_url_with_slash(struct strbuf *buf, const char *url)
+void end_url_with_slash(struct strbuf *buf, const char *url)
 {
 	strbuf_addstr(buf, url);
 	if (buf->len && buf->buf[buf->len - 1] != '/')
diff --git a/http.h b/http.h
index 2dd03e8..37a6a6a 100644
--- a/http.h
+++ b/http.h
@@ -117,6 +117,7 @@ extern void append_remote_object_url(struct strbuf *buf, const char *url,
 				     int only_two_digit_prefix);
 extern char *get_remote_object_url(const char *url, const char *hex,
 				   int only_two_digit_prefix);
+extern void end_url_with_slash(struct strbuf *buf, const char *url);
 
 /* Options for http_request_*() */
 #define HTTP_NO_CACHE		1
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash
  2010-04-07 16:01     ` [PATCH v2 resend " Tay Ray Chuan
@ 2010-04-07 16:01       ` Tay Ray Chuan
  2010-04-07 23:15         ` Junio C Hamano
  2010-04-08  2:15         ` [PATCH v3 1/3] t5541-http-push: add test for URLs with " Tay Ray Chuan
  0 siblings, 2 replies; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-07 16:01 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Shawn O. Pearce, Junio C Hamano

---
 remote-curl.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 0782756..ae14137 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -9,6 +9,10 @@
 #include "sideband.h"
 
 static struct remote *remote;
+
+/* At assignment-time, we append a trailing slash; always use this as
+ * if it ends with a slash.
+ */
 static const char *url;
 
 struct options {
@@ -101,7 +105,7 @@ static struct discovery* discover_refs(const char *service)
 		return last;
 	free_discovery(last);
 
-	strbuf_addf(&buffer, "%s/info/refs", url);
+	strbuf_addf(&buffer, "%sinfo/refs", url);
 	if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) {
 		is_http = 1;
 		if (!strchr(url, '?'))
@@ -120,7 +124,7 @@ static struct discovery* discover_refs(const char *service)
 		strbuf_reset(&buffer);
 
 		proto_git_candidate = 0;
-		strbuf_addf(&buffer, "%s/info/refs", url);
+		strbuf_addf(&buffer, "%sinfo/refs", url);
 		refs_url = strbuf_detach(&buffer, NULL);
 
 		http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
@@ -511,7 +515,7 @@ 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);
+	strbuf_addf(&buf, "%s%s", url, svc);
 	rpc->service_url = strbuf_detach(&buf, NULL);
 
 	strbuf_addf(&buf, "Content-Type: application/x-%s-request", svc);
@@ -800,11 +804,13 @@ int main(int argc, const char **argv)
 	remote = remote_get(argv[1]);
 
 	if (argc > 2) {
-		url = argv[2];
+		end_url_with_slash(&buf, argv[2]);
 	} else {
-		url = remote->url[0];
+		end_url_with_slash(&buf, remote->url[0]);
 	}
 
+	url = strbuf_detach(&buf, NULL);
+
 	http_init(remote);
 
 	do {
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash
  2010-04-07 16:01       ` [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan
@ 2010-04-07 23:15         ` Junio C Hamano
  2010-04-08  2:15         ` [PATCH v3 1/3] t5541-http-push: add test for URLs with " Tay Ray Chuan
  1 sibling, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2010-04-07 23:15 UTC (permalink / raw)
  To: Tay Ray Chuan; +Cc: Git Mailing List, Shawn O. Pearce

You didn't explain what it is for, nor sign-off this patch, but is this a
clean-up?  Is this a bugfix?  Is this an RFC?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/3] t5541-http-push: add test for URLs with trailing slash
  2010-04-07 16:01       ` [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan
  2010-04-07 23:15         ` Junio C Hamano
@ 2010-04-08  2:15         ` Tay Ray Chuan
  2010-04-08  2:15           ` [PATCH v3 2/3] http: make end_url_with_slash() public Tay Ray Chuan
  1 sibling, 1 reply; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-08  2:15 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 t/t5541-http-push.sh |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh
index 795dc2b..e94ac78 100755
--- a/t/t5541-http-push.sh
+++ b/t/t5541-http-push.sh
@@ -34,8 +34,34 @@ test_expect_success 'setup remote repository' '
 	mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"
 '
 
-test_expect_success 'clone remote repository' '
+cat >exp <<EOF
+GET  /smart/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
+POST /smart/test_repo.git/git-upload-pack HTTP/1.1 200
+EOF
+test_expect_failure 'no empty path components' '
+	# In the URL, add a trailing slash, and see if git appends yet another
+	# slash.
 	cd "$ROOT_PATH" &&
+	git clone $HTTPD_URL/smart/test_repo.git/ test_repo_clone &&
+
+	sed -e "
+		s/^.* \"//
+		s/\"//
+		s/ [1-9][0-9]*\$//
+		s/^GET /GET  /
+	" >act <"$HTTPD_ROOT_PATH"/access.log &&
+
+	# Clear the log, so that it does not affect the "used receive-pack
+	# service" test which reads the log too.
+	#
+	# We do this before the actual comparison to ensure the log is cleared.
+	echo > "$HTTPD_ROOT_PATH"/access.log &&
+
+	test_cmp exp act
+'
+
+test_expect_success 'clone remote repository' '
+	rm -rf test_repo_clone &&
 	git clone $HTTPD_URL/smart/test_repo.git test_repo_clone
 '
 
@@ -68,6 +94,7 @@ test_expect_success 'create and delete remote branch' '
 '
 
 cat >exp <<EOF
+
 GET  /smart/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
 POST /smart/test_repo.git/git-upload-pack HTTP/1.1 200
 GET  /smart/test_repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/3] http: make end_url_with_slash() public
  2010-04-08  2:15         ` [PATCH v3 1/3] t5541-http-push: add test for URLs with " Tay Ray Chuan
@ 2010-04-08  2:15           ` Tay Ray Chuan
  2010-04-08  2:15             ` [PATCH v3 3/3] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan
  0 siblings, 1 reply; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-08  2:15 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 http.c |    2 +-
 http.h |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/http.c b/http.c
index 51253e1..07a03fd 100644
--- a/http.c
+++ b/http.c
@@ -720,7 +720,7 @@ static inline int hex(int v)
 		return 'A' + v - 10;
 }
 
-static void end_url_with_slash(struct strbuf *buf, const char *url)
+void end_url_with_slash(struct strbuf *buf, const char *url)
 {
 	strbuf_addstr(buf, url);
 	if (buf->len && buf->buf[buf->len - 1] != '/')
diff --git a/http.h b/http.h
index 2dd03e8..37a6a6a 100644
--- a/http.h
+++ b/http.h
@@ -117,6 +117,7 @@ extern void append_remote_object_url(struct strbuf *buf, const char *url,
 				     int only_two_digit_prefix);
 extern char *get_remote_object_url(const char *url, const char *hex,
 				   int only_two_digit_prefix);
+extern void end_url_with_slash(struct strbuf *buf, const char *url);
 
 /* Options for http_request_*() */
 #define HTTP_NO_CACHE		1
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/3] remote-curl: ensure that URLs have a trailing slash
  2010-04-08  2:15           ` [PATCH v3 2/3] http: make end_url_with_slash() public Tay Ray Chuan
@ 2010-04-08  2:15             ` Tay Ray Chuan
  0 siblings, 0 replies; 10+ messages in thread
From: Tay Ray Chuan @ 2010-04-08  2:15 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

Previously, we blindly assumed that URLs passed to the remote-curl
helper did not end with a trailing slash.

Use the convenience function end_url_with_slash() from http.[ch] to
ensure that URLs have a trailing slash on invocation of the remote-curl
helper, and use the URL as one with a trailing slash throughout.

It is possible for users to pass a URL with a trailing slash to
remote-curl, by, say, setting it in remote.<name>.url in their git
config. The resulting requests have an empty path component (//) and may
break implementations of the http git protocol.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 remote-curl.c        |   16 +++++++++++-----
 t/t5541-http-push.sh |    2 +-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 0782756..ae14137 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -9,6 +9,10 @@
 #include "sideband.h"
 
 static struct remote *remote;
+
+/* At assignment-time, we append a trailing slash; always use this as
+ * if it ends with a slash.
+ */
 static const char *url;
 
 struct options {
@@ -101,7 +105,7 @@ static struct discovery* discover_refs(const char *service)
 		return last;
 	free_discovery(last);
 
-	strbuf_addf(&buffer, "%s/info/refs", url);
+	strbuf_addf(&buffer, "%sinfo/refs", url);
 	if (!prefixcmp(url, "http://") || !prefixcmp(url, "https://")) {
 		is_http = 1;
 		if (!strchr(url, '?'))
@@ -120,7 +124,7 @@ static struct discovery* discover_refs(const char *service)
 		strbuf_reset(&buffer);
 
 		proto_git_candidate = 0;
-		strbuf_addf(&buffer, "%s/info/refs", url);
+		strbuf_addf(&buffer, "%sinfo/refs", url);
 		refs_url = strbuf_detach(&buffer, NULL);
 
 		http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
@@ -511,7 +515,7 @@ 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);
+	strbuf_addf(&buf, "%s%s", url, svc);
 	rpc->service_url = strbuf_detach(&buf, NULL);
 
 	strbuf_addf(&buf, "Content-Type: application/x-%s-request", svc);
@@ -800,11 +804,13 @@ int main(int argc, const char **argv)
 	remote = remote_get(argv[1]);
 
 	if (argc > 2) {
-		url = argv[2];
+		end_url_with_slash(&buf, argv[2]);
 	} else {
-		url = remote->url[0];
+		end_url_with_slash(&buf, remote->url[0]);
 	}
 
+	url = strbuf_detach(&buf, NULL);
+
 	http_init(remote);
 
 	do {
diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh
index e94ac78..17e1bdc 100755
--- a/t/t5541-http-push.sh
+++ b/t/t5541-http-push.sh
@@ -38,7 +38,7 @@ cat >exp <<EOF
 GET  /smart/test_repo.git/info/refs?service=git-upload-pack HTTP/1.1 200
 POST /smart/test_repo.git/git-upload-pack HTTP/1.1 200
 EOF
-test_expect_failure 'no empty path components' '
+test_expect_success 'no empty path components' '
 	# In the URL, add a trailing slash, and see if git appends yet another
 	# slash.
 	cd "$ROOT_PATH" &&
-- 
1.6.6.1368.g82eeb

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-04-08  2:15 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-07 14:51 [PATCH] remote-curl: ensure that URLs do not have a trailing slash Tay Ray Chuan
2010-04-07 15:12 ` Junio C Hamano
2010-04-07 15:57   ` Tay Ray Chuan
2010-04-07 15:58     ` [PATCH v2 1/2] http: make end_url_with_slash() public Tay Ray Chuan
2010-04-07 16:01     ` [PATCH v2 resend " Tay Ray Chuan
2010-04-07 16:01       ` [PATCH v2 resend 2/2] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan
2010-04-07 23:15         ` Junio C Hamano
2010-04-08  2:15         ` [PATCH v3 1/3] t5541-http-push: add test for URLs with " Tay Ray Chuan
2010-04-08  2:15           ` [PATCH v3 2/3] http: make end_url_with_slash() public Tay Ray Chuan
2010-04-08  2:15             ` [PATCH v3 3/3] remote-curl: ensure that URLs have a trailing slash Tay Ray Chuan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.