From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Jeff King <peff@peff.net>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: [PATCH v2 0/4] curl: pass long values where expected
Date: Fri, 06 Jun 2025 09:29:20 +0000 [thread overview]
Message-ID: <pull.1931.v2.git.1749202164.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1931.git.1749112304079.gitgitgadget@gmail.com>
This came up during the release process of Git for Windows v2.50.0-rc1.
Changes since v1:
* Rebased on top of jk/curl-easy-setopt-typefix.
Jeff King (3):
curl: fix integer constant typechecks with curl_easy_setopt()
curl: fix integer variable typechecks with curl_easy_setopt()
curl: fix symbolic constant typechecks with curl_easy_setopt()
Johannes Schindelin (1):
curl: pass `long` values where expected
http-push.c | 8 ++++----
http.c | 50 +++++++++++++++++++++++++-------------------------
imap-send.c | 6 +++---
remote-curl.c | 12 ++++++------
4 files changed, 38 insertions(+), 38 deletions(-)
base-commit: 0bd2d791cc9f745ebaedafc0e1cbebdebe41343e
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1931%2Fdscho%2Fcurl-options-want-long-instead-of-int-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1931/dscho/curl-options-want-long-instead-of-int-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1931
Range-diff vs v1:
-: ----------- > 1: 6f11c42e8ed curl: fix integer constant typechecks with curl_easy_setopt()
-: ----------- > 2: 30325e23ba0 curl: fix integer variable typechecks with curl_easy_setopt()
-: ----------- > 3: 4558c8f84b2 curl: fix symbolic constant typechecks with curl_easy_setopt()
1: 803e235837e ! 4: 80de7491d24 curl: pass `long` values where expected
@@ Commit message
The most likely explanation is the entry "typecheck-gcc.h: fix the
typechecks" in cURL's release notes (https://curl.se/ch/8.14.0.html).
- Let's explicitly convert all `int` parameters in `curl_easy_setopt()`
- calls to `long` parameters.
+ Nearly identical compile errors afflicted recently-updated Debian
+ setups, which have been addressed by `jk/curl-easy-setopt-typefix`.
+
+ However, on macOS Git is built with different build options, which
+ uncovered more instances of `int` values that need to be cast to
+ constants, which were not covered by 6f11c42e8edc (curl: fix integer
+ constant typechecks with curl_easy_setopt(), 2025-06-04). Let's
+ explicitly convert even those remaining `int` constants in
+ `curl_easy_setopt()` calls to `long` parameters.
+
+ In addition to looking at the compile errors of the `osx-gcc` job, I
+ verified that there are no other instances of the same issue that need
+ to be handled in this manner (and that might not be caught by our CI
+ builds because of yet other build options that might skip those code
+ parts), I ran the following command and inspected all 23 results
+ manually to ensure that the fix is now actually complete:
+
+ git grep -n curl_easy_setopt |
+ grep -ve ',.*, *[A-Za-z_"&]' \
+ -e ',.*, *[-0-9]*L)' \
+ -e ',.*,.* (long)'
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
## http-push.c ##
-@@ http-push.c: static char *xml_entities(const char *s)
- static void curl_setup_http_get(CURL *curl, const char *url,
- const char *custom_req)
- {
-- curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
-+ curl_easy_setopt(curl, CURLOPT_HTTPGET, 1l);
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite_null);
@@ http-push.c: static void curl_setup_http(CURL *curl, const char *url,
const char *custom_req, struct buffer *buffer,
curl_write_callback write_fn)
{
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
-+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1l);
++ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_INFILE, buffer);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, buffer->buf.len);
@@ http-push.c: static void curl_setup_http(CURL *curl, const char *url,
curl_easy_setopt(curl, CURLOPT_SEEKDATA, buffer);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_fn);
- curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
-+ curl_easy_setopt(curl, CURLOPT_NOBODY, 0l);
++ curl_easy_setopt(curl, CURLOPT_NOBODY, 0L);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
-+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1l);
++ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
}
static struct curl_slist *get_dav_token_headers(struct remote_lock *lock, enum dav_header_flag options)
## http.c ##
-@@ http.c: static CURL *get_curl_handle(void)
- die("curl_easy_init failed");
-
- if (!curl_ssl_verify) {
-- curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 0);
-- curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 0);
-+ curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 0l);
-+ curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 0l);
- } else {
- /* Verify authenticity of the peer's certificate */
-- curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 1);
-+ curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 1l);
- /* The name in the cert must match whom we tried to connect */
-- curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
-+ curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2l);
- }
-
- if (curl_http_version) {
-@@ http.c: static CURL *get_curl_handle(void)
-
- if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
- !http_schannel_check_revoke) {
-- curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
-+ curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_NO_REVOKE);
- }
-
- if (http_proactive_auth != PROACTIVE_AUTH_NONE)
-@@ http.c: static CURL *get_curl_handle(void)
- curl_low_speed_time);
- }
-
-- curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
-- curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
-+ curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20l);
-+ curl_easy_setopt(result, CURLOPT_POSTREDIR, (long)CURL_REDIR_POST_ALL);
-
- #ifdef GIT_CURL_HAVE_CURLOPT_PROTOCOLS_STR
- {
-@@ http.c: static CURL *get_curl_handle(void)
- user_agent ? user_agent : git_user_agent());
-
- if (curl_ftp_no_epsv)
-- curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
-+ curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0l);
-
- if (curl_ssl_try)
- curl_easy_setopt(result, CURLOPT_USE_SSL, CURLUSESSL_TRY);
-@@ http.c: static CURL *get_curl_handle(void)
-
- if (starts_with(curl_http_proxy, "socks5h"))
- curl_easy_setopt(result,
-- CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
-+ CURLOPT_PROXYTYPE, (long)CURLPROXY_SOCKS5_HOSTNAME);
- else if (starts_with(curl_http_proxy, "socks5"))
- curl_easy_setopt(result,
-- CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
-+ CURLOPT_PROXYTYPE, (long)CURLPROXY_SOCKS5);
- else if (starts_with(curl_http_proxy, "socks4a"))
- curl_easy_setopt(result,
-- CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
-+ CURLOPT_PROXYTYPE, (long)CURLPROXY_SOCKS4A);
- else if (starts_with(curl_http_proxy, "socks"))
- curl_easy_setopt(result,
-- CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
-+ CURLOPT_PROXYTYPE, (long)CURLPROXY_SOCKS4);
- else if (starts_with(curl_http_proxy, "https")) {
-- curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_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);
-@@ http.c: static CURL *get_curl_handle(void)
- }
- init_curl_proxy_auth(result);
-
-- curl_easy_setopt(result, CURLOPT_TCP_KEEPALIVE, 1);
-+ curl_easy_setopt(result, CURLOPT_TCP_KEEPALIVE, 1l);
-
- if (curl_tcp_keepidle > -1)
- curl_easy_setopt(result, CURLOPT_TCP_KEEPIDLE,
@@ http.c: struct active_request_slot *get_active_slot(void)
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, NULL);
@@ http.c: struct active_request_slot *get_active_slot(void)
- curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0);
- curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
- curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0l);
-+ curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1l);
-+ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0L);
++ curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1L);
++ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1L);
curl_easy_setopt(slot->curl, CURLOPT_RANGE, NULL);
/*
@@ http.c: struct active_request_slot *get_active_slot(void)
*/
if (http_follow_config == HTTP_FOLLOW_ALWAYS)
- curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1L);
else
- curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0);
-+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0l);
++ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0L);
curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
@@ http.c: static int http_request(const char *url,
slot = get_active_slot();
- curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1L);
if (!result) {
- curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1L);
} else {
- curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
-+ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0l);
++ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0L);
curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, result);
if (target == HTTP_REQUEST_FILE) {
@@ http.c: static int http_request(const char *url,
if (options && options->initial_request &&
http_follow_config == HTTP_FOLLOW_INITIAL)
- curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1L);
headers = curl_slist_append(headers, buf.buf);
@@ http.c: static int http_request(const char *url,
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
- curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0);
-+ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0l);
++ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0L);
ret = run_one_slot(slot, &results);
@@ http.c: struct http_object_request *new_http_object_request(const char *base_url
curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEDATA, freq);
- curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0);
-+ curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0l);
++ curl_easy_setopt(freq->slot->curl, CURLOPT_FAILONERROR, 0L);
curl_easy_setopt(freq->slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
curl_easy_setopt(freq->slot->curl, CURLOPT_ERRORBUFFER, freq->errorstr);
curl_easy_setopt(freq->slot->curl, CURLOPT_URL, freq->url);
- ## imap-send.c ##
-@@ imap-send.c: static CURL *setup_curl(struct imap_server_conf *srvc, struct credential *cred)
-
- curl_easy_setopt(curl, CURLOPT_URL, path.buf);
- strbuf_release(&path);
-- curl_easy_setopt(curl, CURLOPT_PORT, srvc->port);
-+ curl_easy_setopt(curl, CURLOPT_PORT, (long)srvc->port);
-
- if (srvc->auth_method) {
- struct strbuf auth = STRBUF_INIT;
-@@ imap-send.c: static CURL *setup_curl(struct imap_server_conf *srvc, struct credential *cred)
- if (!srvc->use_ssl)
- curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_TRY);
-
-- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, srvc->ssl_verify);
-- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, srvc->ssl_verify);
-+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, (long)srvc->ssl_verify);
-+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, (long)srvc->ssl_verify);
-
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, fread_buffer);
-
-
## remote-curl.c ##
-@@ remote-curl.c: static int probe_rpc(struct rpc_state *rpc, struct slot_results *results)
- headers = curl_slist_append(headers, rpc->hdr_content_type);
- headers = curl_slist_append(headers, rpc->hdr_accept);
-
-- curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
-- curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0l);
-+ curl_easy_setopt(slot->curl, CURLOPT_POST, 1l);
- curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
- curl_easy_setopt(slot->curl, CURLOPT_ENCODING, NULL);
- curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, "0000");
-- curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, 4);
-+ curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, 4l);
- curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
- curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
- curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &buf);
@@ remote-curl.c: retry:
slot = get_active_slot();
- curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
- curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
-+ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0l);
-+ curl_easy_setopt(slot->curl, CURLOPT_POST, 1l);
++ curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0L);
++ curl_easy_setopt(slot->curl, CURLOPT_POST, 1L);
curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "");
@@ remote-curl.c: retry:
memset(&rpc_in_data.pktline_state, 0, sizeof(rpc_in_data.pktline_state));
curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &rpc_in_data);
- curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0);
-+ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0l);
++ curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0L);
rpc->any_written = 0;
--
gitgitgadget
next prev parent reply other threads:[~2025-06-06 9:29 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-05 8:31 [PATCH] curl: pass `long` values where expected Johannes Schindelin via GitGitGadget
2025-06-05 8:41 ` Kristoffer Haugsbakk
2025-06-05 10:48 ` Johannes Schindelin
2025-06-06 9:29 ` Johannes Schindelin via GitGitGadget [this message]
2025-06-06 9:29 ` [PATCH v2 1/4] curl: fix integer constant typechecks with curl_easy_setopt() Jeff King via GitGitGadget
2025-06-06 9:29 ` [PATCH v2 2/4] curl: fix integer variable " Jeff King via GitGitGadget
2025-06-06 9:29 ` [PATCH v2 3/4] curl: fix symbolic constant " Jeff King via GitGitGadget
2025-06-06 9:29 ` [PATCH v2 4/4] curl: pass `long` values where expected Johannes Schindelin via GitGitGadget
2025-06-06 10:05 ` Jeff King
2025-06-06 15:38 ` Junio C Hamano
2025-06-06 15:35 ` Junio C Hamano
2025-06-06 14:27 ` [PATCH v2 0/4] curl: pass long " Kristoffer Haugsbakk
2025-06-06 15:43 ` Martin Ågren
2025-06-06 15:51 ` Kristoffer Haugsbakk
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=pull.1931.v2.git.1749202164.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=peff@peff.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).