curl.h: remove CURLPROTO_MQTTS from the public header

- the value collided with the internal one used for WebSocket
- we add all new ones as internal bits
- bump to 64-bit internal type
- introduce new define for setting all protocols (CURLPROTO_64ALL)

Reported by Codex Security

Closes #20798
This commit is contained in:
Daniel Stenberg 2026-03-03 17:55:37 +01:00
parent 3d4a701233
commit ad58e07b54
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
7 changed files with 12 additions and 16 deletions

View file

@ -35,8 +35,10 @@ Pass a long that holds a bitmask of protocol bits. If used, this bitmask
limits what protocols libcurl may use in the transfer. This allows you to have
a libcurl built to support a wide range of protocols but still limit specific
transfers to only be allowed to use a subset of them. By default libcurl
accepts all protocols it supports (*CURLPROTO_ALL*). See also
CURLOPT_REDIR_PROTOCOLS(3).
accepts all protocols it supports. See also CURLOPT_REDIR_PROTOCOLS(3).
Note that the old define *CURLPROTO_ALL* no longer enables all protocols a
modern curl might support!
These are the available protocol defines:
~~~c
@ -52,7 +54,6 @@ CURLPROTO_IMAPS
CURLPROTO_LDAP
CURLPROTO_LDAPS
CURLPROTO_MQTT
CURLPROTO_MQTTS
CURLPROTO_POP3
CURLPROTO_POP3S
CURLPROTO_RTMP

View file

@ -59,7 +59,6 @@ CURLPROTO_IMAPS
CURLPROTO_LDAP
CURLPROTO_LDAPS
CURLPROTO_MQTT
CURLPROTO_MQTTS
CURLPROTO_POP3
CURLPROTO_POP3S
CURLPROTO_RTMP

View file

@ -968,7 +968,6 @@ CURLPROTO_IMAPS 7.20.0
CURLPROTO_LDAP 7.19.4
CURLPROTO_LDAPS 7.19.4
CURLPROTO_MQTT 7.71.0
CURLPROTO_MQTTS 8.19.0
CURLPROTO_POP3 7.20.0
CURLPROTO_POP3S 7.20.0
CURLPROTO_RTMP 7.21.0

View file

@ -1103,8 +1103,8 @@ typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy,
#define CURLPROTO_SMBS (1L << 27)
#define CURLPROTO_MQTT (1L << 28)
#define CURLPROTO_GOPHERS (1L << 29)
#define CURLPROTO_MQTTS (1L << 30)
#define CURLPROTO_ALL ((unsigned long)0xffffffff) /* enable everything */
#define CURLPROTO_ALL ((unsigned long)0xffffffff) /* old-style enable
"everything" */
/* long may be 32 or 64 bits, but we should never depend on anything else
but 32 */

View file

@ -2365,7 +2365,7 @@ static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
}
else
/* make a NULL argument reset to default */
s->allowed_protocols = (curl_prot_t)CURLPROTO_ALL;
s->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
break;
case CURLOPT_REDIR_PROTOCOLS_STR:
if(ptr) {

View file

@ -400,7 +400,7 @@ void Curl_init_userdefined(struct Curl_easy *data)
#endif
set->new_file_perms = 0644; /* Default permissions */
set->allowed_protocols = (curl_prot_t) CURLPROTO_ALL;
set->allowed_protocols = (curl_prot_t) CURLPROTO_64ALL;
set->redir_protocols = CURLPROTO_REDIR;
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)

View file

@ -74,18 +74,15 @@
#define CURLPROTO_WSS 0L
#endif
#define CURLPROTO_MQTTS (1LL << 32)
#define CURLPROTO_64ALL ((uint64_t)0xffffffffffffffff)
/* the default protocols accepting a redirect to */
#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
CURLPROTO_FTPS)
/* This should be undefined once we need bit 32 or higher */
#define PROTO_TYPE_SMALL
#ifndef PROTO_TYPE_SMALL
typedef curl_off_t curl_prot_t;
#else
typedef uint32_t curl_prot_t;
#endif
/* This mask is for all the old protocols that are provided and defined in the
public header and shall exclude protocols added since which are not exposed