Merge pull request #5187 from ianhattendorf/fix/clone-whitespace clone: don't decode URL percent encodings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
diff --git a/src/net.c b/src/net.c
index e35abbb..a1dc408 100644
--- a/src/net.c
+++ b/src/net.c
@@ -94,7 +94,7 @@ int git_net_url_parse(git_net_url *url, const char *given)
if (has_path) {
const char *url_path = given + u.field_data[UF_PATH].off;
size_t url_path_len = u.field_data[UF_PATH].len;
- git_buf_decode_percent(&path, url_path, url_path_len);
+ git_buf_put(&path, url_path, url_path_len);
} else {
git_buf_puts(&path, "/");
}
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index a97e8fe..c7fe8e1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -69,5 +69,5 @@ ADD_CLAR_TEST(offline -v -xonline)
ADD_CLAR_TEST(invasive -v -score::ftruncate -sfilter::stream::bigfile -sodb::largefiles -siterator::workdir::filesystem_gunk -srepo::init -srepo::init::at_filesystem_root)
ADD_CLAR_TEST(online -v -sonline)
ADD_CLAR_TEST(gitdaemon -v -sonline::push)
-ADD_CLAR_TEST(ssh -v -sonline::push -sonline::clone::ssh_cert -sonline::clone::ssh_with_paths)
+ADD_CLAR_TEST(ssh -v -sonline::push -sonline::clone::ssh_cert -sonline::clone::ssh_with_paths -sonline::clone::path_whitespace_ssh)
ADD_CLAR_TEST(proxy -v -sonline::clone::proxy)
diff --git a/tests/online/clone.c b/tests/online/clone.c
index 60aaeeb..3f8ee7f 100644
--- a/tests/online/clone.c
+++ b/tests/online/clone.c
@@ -863,3 +863,9 @@ void test_online_clone__proxy_cred_callback_after_failed_url_creds(void)
git_buf_dispose(&url);
}
+
+void test_online_clone__path_whitespace(void)
+{
+ cl_git_pass(git_clone(&g_repo, "https://libgit2@dev.azure.com/libgit2/test/_git/spaces%20in%20the%20name", "./foo", &g_options));
+ cl_assert(git_path_exists("./foo/master.txt"));
+}