diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-01-23 18:17:36 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-01-24 15:47:29 +0100 |
commit | 794dc72077f2ababbf11ed50660a7832c9d7fac7 (patch) | |
tree | d3968b33ad482e6f661656d601d9a96262d5b20d /etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch | |
parent | 90fcfb5ed0c666ad977c6a7fce93528212b9da8f (diff) | |
download | justbuild-794dc72077f2ababbf11ed50660a7832c9d7fac7.tar.gz |
libgit2: Patch handling of per-remote no proxy settings in gitconfig
Diffstat (limited to 'etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch')
-rw-r--r-- | etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch b/etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch new file mode 100644 index 00000000..775ba392 --- /dev/null +++ b/etc/patches/libgit2_v1.2.0_fix-proxy-settings.patch @@ -0,0 +1,78 @@ +From 9488139554c486fd0691d4b90fb6aff479c0421d Mon Sep 17 00:00:00 2001 +From: Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> +Date: Mon, 23 Jan 2023 17:19:02 +0100 +Subject: [PATCH] Correct handling of no_proxy .gitconfig options to match git + behavior + +Explicitly removing the need for a proxy for specific remotes in the +.gitconfig file via +~~~ +[http <URL>] + proxy = +~~~ +results in an `error code 12: malformed URL ''` error. Expected +behavior is to treat remotes for which such .gitconfig entries exist +the same as if no proxy settings have been found at all. + +This issue was found in libgit2 v1.2.0. + +This commit fixes the issue. +--- + src/remote.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/src/remote.c b/src/remote.c +index 7dddea93a..6021c27d4 100644 +--- a/src/remote.c ++++ b/src/remote.c +@@ -887,6 +887,7 @@ static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) + git_config *cfg; + git_buf buf = GIT_BUF_INIT; + git_net_url lookup_url = GIT_NET_URL_INIT; ++ char *tmp_out = NULL; + int error; + + if ((error = git_net_url_dup(&lookup_url, url)) < 0 || +@@ -898,8 +899,14 @@ static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) + git_buf_clear(&buf); + + if ((error = git_buf_printf(&buf, "remote.%s.proxy", remote->name)) < 0 || +- (error = lookup_config(out, cfg, buf.ptr)) != GIT_ENOTFOUND) ++ (error = lookup_config(&tmp_out, cfg, buf.ptr)) != GIT_ENOTFOUND) { ++ /* only non-empty entries should be passed as proxy url */ ++ if (!tmp_out || strcmp(tmp_out, "")) { ++ *out = git__strdup(tmp_out); ++ GIT_ERROR_CHECK_ALLOC(*out); ++ } + goto done; ++ } + } + + while (true) { +@@ -908,8 +915,14 @@ static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) + if ((error = git_buf_puts(&buf, "http.")) < 0 || + (error = git_net_url_fmt(&buf, &lookup_url)) < 0 || + (error = git_buf_puts(&buf, ".proxy")) < 0 || +- (error = lookup_config(out, cfg, buf.ptr)) != GIT_ENOTFOUND) ++ (error = lookup_config(&tmp_out, cfg, buf.ptr)) != GIT_ENOTFOUND) { ++ /* only non-empty entries should be passed as proxy url */ ++ if (!tmp_out || strcmp(tmp_out, "")) { ++ *out = git__strdup(tmp_out); ++ GIT_ERROR_CHECK_ALLOC(*out); ++ } + goto done; ++ } + + if (! lookup_url.path[0]) + break; +@@ -924,6 +937,7 @@ static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) + done: + git_buf_dispose(&buf); + git_net_url_dispose(&lookup_url); ++ git__free(tmp_out); + return error; + } + +-- +2.30.2 + |