Skip to content

Commit 6f11c42

Browse files
peffgitster
authored andcommitted
curl: fix integer constant typechecks with curl_easy_setopt()
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 0bd2d79 commit 6f11c42

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

http-push.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ static char *xml_entities(const char *s)
195195
static void curl_setup_http_get(CURL *curl, const char *url,
196196
const char *custom_req)
197197
{
198-
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
198+
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
199199
curl_easy_setopt(curl, CURLOPT_URL, url);
200200
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, custom_req);
201201
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite_null);

http.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,13 +1019,13 @@ static CURL *get_curl_handle(void)
10191019
die("curl_easy_init failed");
10201020

10211021
if (!curl_ssl_verify) {
1022-
curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 0);
1023-
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 0);
1022+
curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 0L);
1023+
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 0L);
10241024
} else {
10251025
/* Verify authenticity of the peer's certificate */
1026-
curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 1);
1026+
curl_easy_setopt(result, CURLOPT_SSL_VERIFYPEER, 1L);
10271027
/* The name in the cert must match whom we tried to connect */
1028-
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
1028+
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2L);
10291029
}
10301030

10311031
if (curl_http_version) {
@@ -1117,7 +1117,7 @@ static CURL *get_curl_handle(void)
11171117
curl_low_speed_time);
11181118
}
11191119

1120-
curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
1120+
curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20L);
11211121
curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
11221122

11231123
#ifdef GIT_CURL_HAVE_CURLOPT_PROTOCOLS_STR
@@ -1151,7 +1151,7 @@ static CURL *get_curl_handle(void)
11511151
user_agent ? user_agent : git_user_agent());
11521152

11531153
if (curl_ftp_no_epsv)
1154-
curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
1154+
curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0L);
11551155

11561156
if (curl_ssl_try)
11571157
curl_easy_setopt(result, CURLOPT_USE_SSL, CURLUSESSL_TRY);
@@ -1254,7 +1254,7 @@ static CURL *get_curl_handle(void)
12541254
}
12551255
init_curl_proxy_auth(result);
12561256

1257-
curl_easy_setopt(result, CURLOPT_TCP_KEEPALIVE, 1);
1257+
curl_easy_setopt(result, CURLOPT_TCP_KEEPALIVE, 1L);
12581258

12591259
if (curl_tcp_keepidle > -1)
12601260
curl_easy_setopt(result, CURLOPT_TCP_KEEPIDLE,

remote-curl.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -877,12 +877,12 @@ static int probe_rpc(struct rpc_state *rpc, struct slot_results *results)
877877
headers = curl_slist_append(headers, rpc->hdr_content_type);
878878
headers = curl_slist_append(headers, rpc->hdr_accept);
879879

880-
curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
881-
curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
880+
curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0L);
881+
curl_easy_setopt(slot->curl, CURLOPT_POST, 1L);
882882
curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
883883
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, NULL);
884884
curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, "0000");
885-
curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, 4);
885+
curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDSIZE, 4L);
886886
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
887887
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_buffer);
888888
curl_easy_setopt(slot->curl, CURLOPT_WRITEDATA, &buf);

0 commit comments

Comments
 (0)