]> git.ipfire.org Git - thirdparty/git.git/commitdiff
curl: fix integer constant typechecks with curl_easy_setopt()
authorJeff King <peff@peff.net>
Wed, 4 Jun 2025 20:55:13 +0000 (16:55 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 Jun 2025 21:17:53 +0000 (14:17 -0700)
The curl documentation specifies that curl_easy_setopt() takes either:

  ...a long, a function pointer, an object pointer or a curl_off_t,
  depending on what the specific option expects.

But when we pass an integer constant like "0", it will by default be a
regular non-long int. This has always been wrong, but seemed to work in
practice (I didn't dig into curl's implementation to see whether this
might actually be triggering undefined behavior, but it seems likely and
regardless we should do what the docs say).

This is especially important since curl has a type-checking macro that
causes building against curl 8.14 to produce many warnings. The specific
commit is due to their 79b4e56b3 (typecheck-gcc.h: fix the typechecks,
2025-04-22). Curiously, it does only seem to trigger when compiled with
-O2 for me.

We can fix it by just marking the constants with a long "L".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-push.c
http.c
remote-curl.c

index f9e67cabd4bee8ac4ac223e990623988314683c3..591e46ab260d57f20425790668c74070267f01da 100644 (file)
@@ -195,7 +195,7 @@ 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);
diff --git a/http.c b/http.c
index 3c029cf8947df7ca5a4997726a7f49fc4339c1aa..cce2ea7287368703da0d0f2766d77e715ef39343 100644 (file)
--- a/http.c
+++ b/http.c
@@ -1019,13 +1019,13 @@ 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) {
@@ -1117,7 +1117,7 @@ static CURL *get_curl_handle(void)
                                 curl_low_speed_time);
        }
 
-       curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
+       curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20L);
        curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
 
 #ifdef GIT_CURL_HAVE_CURLOPT_PROTOCOLS_STR
@@ -1151,7 +1151,7 @@ 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);
@@ -1254,7 +1254,7 @@ 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,
index 590b228f67fcbc2872e24bba5aad8fc68adc1fc0..6183772191f2145e1dd76bd20dcf6f5cb27b983a 100644 (file)
@@ -877,12 +877,12 @@ 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);