All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.