From: Viktor Szakats Date: Mon, 28 Jul 2025 08:59:48 +0000 (+0200) Subject: CURLOPT: bump `CURLPROXY_*` enums to `long`, drop casts X-Git-Tag: curl-8_16_0~348 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a12663d06d9c42fd40a8655d5247f7afeeb8e1e;p=thirdparty%2Fcurl.git CURLOPT: bump `CURLPROXY_*` enums to `long`, drop casts This patch bumps the size of these macros from `int` to `long`, while keeping their actual values the same. It may cause incompatibilities in user code, requiring the bump of holder variables and/or adding casts: - CURLPROXY_HTTP - CURLPROXY_HTTP_1_0 - CURLPROXY_HTTPS - CURLPROXY_HTTPS2 - CURLPROXY_SOCKS4 - CURLPROXY_SOCKS4A - CURLPROXY_SOCKS5 - CURLPROXY_SOCKS5_HOSTNAME Also: - keep existing cast within the documentation to make sure it applies to older curl versions as well. Closes #18054 --- diff --git a/include/curl/curl.h b/include/curl/curl.h index f03459093b..0ff9a307a7 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -788,20 +788,24 @@ typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ mbedtls_ssl_config */ void *userptr); +#define CURLPROXY_HTTP 0L /* added in 7.10, new in 7.19.4 default is + to use CONNECT HTTP/1.1 */ +#define CURLPROXY_HTTP_1_0 1L /* force to use CONNECT HTTP/1.0 + added in 7.19.4 */ +#define CURLPROXY_HTTPS 2L /* HTTPS but stick to HTTP/1 + added in 7.52.0 */ +#define CURLPROXY_HTTPS2 3L /* HTTPS and attempt HTTP/2 + added in 8.2.0 */ +#define CURLPROXY_SOCKS4 4L /* support added in 7.15.2, enum existed + already in 7.10 */ +#define CURLPROXY_SOCKS5 5L /* added in 7.10 */ +#define CURLPROXY_SOCKS4A 6L /* added in 7.18.0 */ +#define CURLPROXY_SOCKS5_HOSTNAME 7L /* Use the SOCKS5 protocol but pass along + the hostname rather than the IP + address. added in 7.18.0 */ + typedef enum { - CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use - CONNECT HTTP/1.1 */ - CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT - HTTP/1.0 */ - CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ - CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ - CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already - in 7.10 */ - CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ - CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the - hostname rather than the IP address. added - in 7.18.0 */ + CURLPROXY_LAST = 8 /* never use */ } curl_proxytype; /* this enum was added in 7.10 */ /* diff --git a/lib/setopt.c b/lib/setopt.c index 5464d07f79..820597af07 100644 --- a/lib/setopt.c +++ b/lib/setopt.c @@ -791,7 +791,7 @@ static CURLcode setopt_long(struct Curl_easy *data, CURLoption option, */ if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME)) return CURLE_BAD_FUNCTION_ARGUMENT; - data->set.proxytype = (unsigned char)(curl_proxytype)arg; + data->set.proxytype = (unsigned char)arg; break; case CURLOPT_PROXY_TRANSFER_MODE: diff --git a/lib/url.c b/lib/url.c index 204f380137..8a808ef5fd 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2250,7 +2250,7 @@ static char *detect_proxy(struct Curl_easy *data, */ static CURLcode parse_proxy(struct Curl_easy *data, struct connectdata *conn, char *proxy, - curl_proxytype proxytype) + long proxytype) { char *portptr = NULL; int port = -1; @@ -2568,7 +2568,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data, * connection that may exist registered to the same proxy host. ***********************************************************************/ if(proxy || socksproxy) { - curl_proxytype ptype = (curl_proxytype)conn->http_proxy.proxytype; + long ptype = conn->http_proxy.proxytype; if(proxy) { result = parse_proxy(data, conn, proxy, ptype); Curl_safefree(proxy); /* parse_proxy copies the proxy string */ diff --git a/lib/urldata.h b/lib/urldata.h index fffc38a614..cae24966eb 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -625,8 +625,7 @@ struct ip_quadruple { struct proxy_info { struct hostname host; int port; - unsigned char proxytype; /* curl_proxytype: what kind of proxy that is in - use */ + unsigned char proxytype; /* what kind of proxy that is in use */ char *user; /* proxy username string, allocated */ char *passwd; /* proxy password string, allocated */ }; @@ -1435,7 +1434,7 @@ struct UserDefined { unsigned short proxyport; /* If non-zero, use this port number by default. If the proxy string features a ":[port]" that one will override this. */ - unsigned char proxytype; /* what kind of proxy: curl_proxytype */ + unsigned char proxytype; /* what kind of proxy */ unsigned char socks5auth;/* kind of SOCKS5 authentication to use (bitmask) */ #endif struct ssl_general_config general_ssl; /* general user defined SSL stuff */ diff --git a/tests/libtest/lib1525.c b/tests/libtest/lib1525.c index e76951f23e..10639ea7ff 100644 --- a/tests/libtest/lib1525.c +++ b/tests/libtest/lib1525.c @@ -78,7 +78,7 @@ static CURLcode test_lib1525(char *URL) test_setopt(curl, CURLOPT_POST, 0L); test_setopt(curl, CURLOPT_UPLOAD, 1L); test_setopt(curl, CURLOPT_VERBOSE, 1L); - test_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTP); + test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); test_setopt(curl, CURLOPT_HEADER, 1L); test_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite); test_setopt(curl, CURLOPT_READFUNCTION, t1525_read_cb); diff --git a/tests/libtest/lib1526.c b/tests/libtest/lib1526.c index 6a15857795..ad3956fa74 100644 --- a/tests/libtest/lib1526.c +++ b/tests/libtest/lib1526.c @@ -82,7 +82,7 @@ static CURLcode test_lib1526(char *URL) test_setopt(curl, CURLOPT_POST, 0L); test_setopt(curl, CURLOPT_UPLOAD, 1L); test_setopt(curl, CURLOPT_VERBOSE, 1L); - test_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTP); + test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); test_setopt(curl, CURLOPT_HEADER, 1L); test_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite); test_setopt(curl, CURLOPT_READFUNCTION, t1526_read_cb); diff --git a/tests/libtest/lib1527.c b/tests/libtest/lib1527.c index 2fff74f7ce..2e7c341cc2 100644 --- a/tests/libtest/lib1527.c +++ b/tests/libtest/lib1527.c @@ -79,7 +79,7 @@ static CURLcode test_lib1527(char *URL) test_setopt(curl, CURLOPT_POST, 0L); test_setopt(curl, CURLOPT_UPLOAD, 1L); test_setopt(curl, CURLOPT_VERBOSE, 1L); - test_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTP); + test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); test_setopt(curl, CURLOPT_HEADER, 1L); test_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite); test_setopt(curl, CURLOPT_READFUNCTION, t1527_read_cb); diff --git a/tests/libtest/lib1528.c b/tests/libtest/lib1528.c index 641487ba9e..068c17c682 100644 --- a/tests/libtest/lib1528.c +++ b/tests/libtest/lib1528.c @@ -58,7 +58,7 @@ static CURLcode test_lib1528(char *URL) test_setopt(curl, CURLOPT_PROXYHEADER, phl); test_setopt(curl, CURLOPT_HEADEROPT, (long)CURLHEADER_SEPARATE); test_setopt(curl, CURLOPT_VERBOSE, 1L); - test_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTP); + test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); test_setopt(curl, CURLOPT_HEADER, 1L); res = curl_easy_perform(curl); diff --git a/tests/libtest/lib1529.c b/tests/libtest/lib1529.c index b40270934f..290343bc96 100644 --- a/tests/libtest/lib1529.c +++ b/tests/libtest/lib1529.c @@ -48,7 +48,7 @@ static CURLcode test_lib1529(char *URL) test_setopt(curl, CURLOPT_URL, bURL); test_setopt(curl, CURLOPT_PROXY, libtest_arg2); test_setopt(curl, CURLOPT_VERBOSE, 1L); - test_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_HTTP); + test_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); test_setopt(curl, CURLOPT_HEADER, 1L); res = curl_easy_perform(curl); diff --git a/tests/libtest/lib564.c b/tests/libtest/lib564.c index 9f5035b485..2cf3102ad3 100644 --- a/tests/libtest/lib564.c +++ b/tests/libtest/lib564.c @@ -41,7 +41,7 @@ static CURLcode test_lib564(char *URL) easy_setopt(curl, CURLOPT_URL, URL); easy_setopt(curl, CURLOPT_VERBOSE, 1L); easy_setopt(curl, CURLOPT_PROXY, libtest_arg2); - easy_setopt(curl, CURLOPT_PROXYTYPE, (long)CURLPROXY_SOCKS4); + easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); multi_init(m);