diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-09-21 21:11:02 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2016-04-19 13:54:19 +0200 |
commit | 4e01741390d1bed120a44456236ef70d9304380b (patch) | |
tree | 883e0d6e9ab7b95cd4a8328fe5984353107a791b | |
parent | b117721dd8aa039e074c6bd46b18a526ac9cb2f3 (diff) | |
download | libgit2-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.c | 22 | ||||
-rw-r--r-- | tests/network/urlparse.c | 9 |
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, |