From: Junio C Hamano <gitster@pobox.com>
To: aminnimaj@gmail.com
Cc: git@vger.kernel.org, peff@peff.net, ryan.hendrickson@alum.mit.edu
Subject: Re: [PATCH 1/1] http: reject unsupported proxy URL schemes
Date: Mon, 04 May 2026 07:19:47 +0900 [thread overview]
Message-ID: <xmqqjytkrv98.fsf@gitster.g> (raw)
In-Reply-To: <20260501190401.1580-2-aminnimaj@gmail.com> (aminnimaj@gmail.com's message of "Fri, 1 May 2026 19:04:01 +0000")
aminnimaj@gmail.com writes:
> +static int is_socks_proxy_protocol(const char *protocol)
> +{
> + return protocol &&
> + (!strcmp(protocol, "socks") ||
> + !strcmp(protocol, "socks4") ||
> + !strcmp(protocol, "socks4a") ||
> + !strcmp(protocol, "socks5") ||
> + !strcmp(protocol, "socks5h"));
> +}
> +
> +static int set_curl_proxy_type(CURL *result, const char *protocol)
> +{
> + if (!protocol || !strcmp(protocol, "http"))
> + return 0;
> +
> + if (!strcmp(protocol, "socks5h"))
> + curl_easy_setopt(result, CURLOPT_PROXYTYPE,
> + (long)CURLPROXY_SOCKS5_HOSTNAME);
> + else if (!strcmp(protocol, "socks5"))
> + curl_easy_setopt(result, CURLOPT_PROXYTYPE,
> + (long)CURLPROXY_SOCKS5);
> + else if (!strcmp(protocol, "socks4a"))
> + curl_easy_setopt(result, CURLOPT_PROXYTYPE,
> + (long)CURLPROXY_SOCKS4A);
> + else if (!strcmp(protocol, "socks") ||
> + !strcmp(protocol, "socks4"))
> + curl_easy_setopt(result, CURLOPT_PROXYTYPE,
> + (long)CURLPROXY_SOCKS4);
> + else if (!strcmp(protocol, "https")) {
> + curl_easy_setopt(result, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTPS);
> +
> + if (http_proxy_ssl_cert)
> + curl_easy_setopt(result, CURLOPT_PROXY_SSLCERT,
> + http_proxy_ssl_cert);
> +
> + if (http_proxy_ssl_key)
> + curl_easy_setopt(result, CURLOPT_PROXY_SSLKEY,
> + http_proxy_ssl_key);
> +
> + if (has_proxy_cert_password())
> + curl_easy_setopt(result, CURLOPT_PROXY_KEYPASSWD,
> + proxy_cert_auth.password);
> + } else {
> + return -1;
> + }
> +
> + return 0;
> +}
Can these two be rewritten to be more table driven? I.e.,
static struct socks_proxy_type {
const char *name;
long curlsym;
} socks_proxy_type[] = {
{ "socks", CURLPROXY_SOCKS4_HOSTNAME },
...
{ "socks5h", CURLPROXY_SOCKS5_HOSTNAME },
};
static bool is_socks_proxy_protocol(const char *protocol)
{
if (!protocol)
return false;
for (int i = 0; i < ARRAY_SIZE(socks_proxy_type); i++)
if (!strcmp(socks_proxy_type[i].name, protocol))
return true;
return false;
}
static int set_curl_proxy_type(...)
{
for (int i = 0; i < ARRAY_SIZE(socks_proxy_type); i++) {
if (!strcmp(socks_proxy_type[i].name, protocol)) {
curl_easy_setopt(result, CURLOPT_PROXYTYPE,
socks_proxy_type[i].curlsym);
return 0;
}
}
/* otherwise ... */
if (!strcmp(protocol, "https")) {
...
}
}
> diff --git a/t/t5564-http-proxy.sh b/t/t5564-http-proxy.sh
> index 3bcbdef409..db69aa2295 100755
> --- a/t/t5564-http-proxy.sh
> +++ b/t/t5564-http-proxy.sh
> @@ -95,4 +95,9 @@ test_expect_success 'Unix socket requires localhost' - <<\EOT
> }
> EOT
>
> +test_expect_success 'unknown proxy scheme is rejected' '
> + ! git clone -c http.proxy=htpp://127.0.0.1 https://example.com/repo.git 2>err &&
Use test_must_fail to tell between uncontrolled failures like
crashes and controlled die()s.
> + grep -Fx "fatal: Invalid proxy URL '\''htpp://127.0.0.1'\'': unsupported proxy scheme '\''htpp'\''" err
> +'
Avoid insisting the exact match with such a long line and stick to
the essential part, like "unsupported proxy scheme '...'".
Also use test_grep for better debuggability.
next prev parent reply other threads:[~2026-05-03 22:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-01 19:04 [PATCH 0/1] http: reject unsupported proxy URL schemes aminnimaj
2026-05-01 19:04 ` [PATCH 1/1] " aminnimaj
2026-05-03 22:19 ` Junio C Hamano [this message]
2026-05-05 9:19 ` [PATCH v2 0/1] " aminnimaj
2026-05-05 9:19 ` [PATCH v2 1/1] " aminnimaj
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqjytkrv98.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=aminnimaj@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=ryan.hendrickson@alum.mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.