summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-09-21 21:11:02 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2016-04-19 13:54:19 +0200
commit4e01741390d1bed120a44456236ef70d9304380b (patch)
tree883e0d6e9ab7b95cd4a8328fe5984353107a791b
parentb117721dd8aa039e074c6bd46b18a526ac9cb2f3 (diff)
downloadlibgit2-4e01741390d1bed120a44456236ef70d9304380b.tar.gz
netops: make the path optional in URLs
When we're dealing with proxy addresses, we only want a hostname and port, and the user would not provide a path, so make it optional so we can use this same function to parse git as well as proxy URLs.
-rw-r--r--src/netops.c22
-rw-r--r--tests/network/urlparse.c9
2 files changed, 21 insertions, 10 deletions
diff --git a/src/netops.c b/src/netops.c
index c4241989f..90326ea59 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -257,16 +257,18 @@ int gitno_extract_url_parts(
*port = git__strdup(default_port);
GITERR_CHECK_ALLOC(*port);
- if (u.field_set & (1 << UF_PATH)) {
- *path = git__substrdup(_path, u.field_data[UF_PATH].len);
- GITERR_CHECK_ALLOC(*path);
- } else {
- git__free(*port);
- *port = NULL;
- git__free(*host);
- *host = NULL;
- giterr_set(GITERR_NET, "invalid url, missing path");
- return GIT_EINVALIDSPEC;
+ if (path) {
+ if (u.field_set & (1 << UF_PATH)) {
+ *path = git__substrdup(_path, u.field_data[UF_PATH].len);
+ GITERR_CHECK_ALLOC(*path);
+ } else {
+ git__free(*port);
+ *port = NULL;
+ git__free(*host);
+ *host = NULL;
+ giterr_set(GITERR_NET, "invalid url, missing path");
+ return GIT_EINVALIDSPEC;
+ }
}
if (u.field_set & (1 << UF_USERINFO)) {
diff --git a/tests/network/urlparse.c b/tests/network/urlparse.c
index b3ac8ae60..4a3096baa 100644
--- a/tests/network/urlparse.c
+++ b/tests/network/urlparse.c
@@ -121,6 +121,15 @@ void test_network_urlparse__user_pass_port(void)
cl_assert_equal_s(pass, "pass");
}
+void test_network_urlparse__optional_path(void)
+{
+ cl_git_fail(gitno_extract_url_parts(&host, &port, &path, &user, &pass,
+ "https://user:pass@example.com:9191", "8080"));
+
+ cl_git_pass(gitno_extract_url_parts(&host, &port, NULL, &user, &pass,
+ "https://user:pass@example.com:9191", "8080"));
+}
+
void test_network_urlparse__connection_data_http(void)
{
cl_git_pass(gitno_connection_data_from_url(&conndata,