From e66fc3768f541beb380a4f2e4e7ab6b5bb45754f Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Mon, 3 Mar 2025 16:21:18 +0100 Subject: [PATCH] add more tlvs for completeness --- curl_fuzzer.cc | 4 + curl_fuzzer.h | 181 +++++++++++++++++++++++++++++++++++++++++++++ curl_fuzzer_tlv.cc | 178 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 362 insertions(+), 1 deletion(-) diff --git a/curl_fuzzer.cc b/curl_fuzzer.cc index 4a7b03b9..fe752017 100644 --- a/curl_fuzzer.cc +++ b/curl_fuzzer.cc @@ -512,6 +512,10 @@ int fuzz_set_allowed_protocols(FUZZ_DATA *fuzz) allowed_protocols = "dict,file,ftp,ftps,gopher,gophers,http,https,imap,imaps," "mqtt,pop3,pop3s," + "ldap,ldaps," + "rtmp,rtmpe,rtmps,rtmpt,rtmpte,rtmpts," + "scp," + "sftp," "rtsp,smb,smbs,smtp,smtps,tftp"; #endif #ifdef FUZZ_PROTOCOLS_DICT diff --git a/curl_fuzzer.h b/curl_fuzzer.h index 3fb90600..bb2beae0 100644 --- a/curl_fuzzer.h +++ b/curl_fuzzer.h @@ -78,6 +78,187 @@ #define TLV_TYPE_CONNECT_ONLY 50 #define TLV_TYPE_HSTS 51 #define TLV_TYPE_HTTPPOSTBODY 52 +#define TLV_TYPE_PROXY 53 +#define TLV_TYPE_PROXYTYPE 54 + +#define TLV_TYPE_PROXYUSERPWD 100 +#define TLV_TYPE_REFERER 101 +#define TLV_TYPE_FTPPORT 102 +#define TLV_TYPE_SSLCERT 103 +#define TLV_TYPE_KEYPASSWD 104 +#define TLV_TYPE_INTERFACE 105 +#define TLV_TYPE_KRBLEVEL 106 +#define TLV_TYPE_CAINFO 107 +#define TLV_TYPE_SSL_CIPHER_LIST 108 +#define TLV_TYPE_SSLCERTTYPE 109 +#define TLV_TYPE_SSLKEY 110 +#define TLV_TYPE_SSLKEYTYPE 111 +#define TLV_TYPE_SSLENGINE 112 +#define TLV_TYPE_CAPATH 113 +#define TLV_TYPE_FTP_ACCOUNT 114 +#define TLV_TYPE_COOKIELIST 115 +#define TLV_TYPE_FTP_ALTERNATIVE_TO_USER 116 +#define TLV_TYPE_SSH_PUBLIC_KEYFILE 117 +#define TLV_TYPE_SSH_PRIVATE_KEYFILE 118 +#define TLV_TYPE_SSH_HOST_PUBLIC_KEY_MD5 119 +#define TLV_TYPE_ISSUERCERT 120 +#define TLV_TYPE_PROXYUSERNAME 121 +#define TLV_TYPE_PROXYPASSWORD 122 +#define TLV_TYPE_NOPROXY 123 +#define TLV_TYPE_SSH_KNOWNHOSTS 124 +#define TLV_TYPE_TLSAUTH_USERNAME 125 +#define TLV_TYPE_TLSAUTH_PASSWORD 126 +#define TLV_TYPE_TLSAUTH_TYPE 127 +#define TLV_TYPE_DNS_SERVERS 128 +#define TLV_TYPE_DNS_INTERFACE 129 +#define TLV_TYPE_DNS_LOCAL_IP4 130 +#define TLV_TYPE_DNS_LOCAL_IP6 131 +#define TLV_TYPE_PINNEDPUBLICKEY 132 +#define TLV_TYPE_UNIX_SOCKET_PATH 133 +#define TLV_TYPE_PROXY_SERVICE_NAME 134 +#define TLV_TYPE_SERVICE_NAME 135 +#define TLV_TYPE_DEFAULT_PROTOCOL 136 +#define TLV_TYPE_PROXY_CAINFO 137 +#define TLV_TYPE_PROXY_CAPATH 138 +#define TLV_TYPE_PROXY_TLSAUTH_USERNAME 139 +#define TLV_TYPE_PROXY_TLSAUTH_PASSWORD 140 +#define TLV_TYPE_PROXY_TLSAUTH_TYPE 141 +#define TLV_TYPE_PROXY_SSLCERT 142 +#define TLV_TYPE_PROXY_SSLCERTTYPE 143 +#define TLV_TYPE_PROXY_SSLKEY 144 +#define TLV_TYPE_PROXY_SSLKEYTYPE 145 +#define TLV_TYPE_PROXY_KEYPASSWD 146 +#define TLV_TYPE_PROXY_SSL_CIPHER_LIST 147 +#define TLV_TYPE_PROXY_CRLFILE 148 +#define TLV_TYPE_PRE_PROXY 149 +#define TLV_TYPE_PROXY_PINNEDPUBLICKEY 150 +#define TLV_TYPE_ABSTRACT_UNIX_SOCKET 151 +#define TLV_TYPE_REQUEST_TARGET 152 +#define TLV_TYPE_TLS13_CIPHERS 153 +#define TLV_TYPE_PROXY_TLS13_CIPHERS 154 +#define TLV_TYPE_SASL_AUTHZID 155 +#define TLV_TYPE_PROXY_ISSUERCERT 156 +#define TLV_TYPE_SSL_EC_CURVES 157 +#define TLV_TYPE_AWS_SIGV4 158 +#define TLV_TYPE_REDIR_PROTOCOLS_STR 159 +#define TLV_TYPE_HAPROXY_CLIENT_IP 160 +#define TLV_TYPE_ECH 161 + +#define TLV_TYPE_PORT 200 +#define TLV_TYPE_LOW_SPEED_LIMIT 201 +#define TLV_TYPE_LOW_SPEED_TIME 202 +#define TLV_TYPE_RESUME_FROM 203 +#define TLV_TYPE_TIMEVALUE 204 +#define TLV_TYPE_NOPROGRESS 205 +#define TLV_TYPE_FAILONERROR 206 +#define TLV_TYPE_DIRLISTONLY 207 +#define TLV_TYPE_APPEND 208 +#define TLV_TYPE_TRANSFERTEXT 209 +#define TLV_TYPE_AUTOREFERER 210 +#define TLV_TYPE_PROXYPORT 211 +#define TLV_TYPE_POSTFIELDSIZE 212 +#define TLV_TYPE_HTTPPROXYTUNNEL 213 +#define TLV_TYPE_SSL_VERIFYPEER 214 +#define TLV_TYPE_MAXREDIRS 215 +#define TLV_TYPE_FILETIME 216 +#define TLV_TYPE_MAXCONNECTS 217 +#define TLV_TYPE_FRESH_CONNECT 218 +#define TLV_TYPE_FORBID_REUSE 219 +#define TLV_TYPE_CONNECTTIMEOUT 220 +#define TLV_TYPE_HTTPGET 221 +#define TLV_TYPE_SSL_VERIFYHOST 222 +#define TLV_TYPE_FTP_USE_EPSV 223 +#define TLV_TYPE_SSLENGINE_DEFAULT 224 +#define TLV_TYPE_DNS_CACHE_TIMEOUT 225 +#define TLV_TYPE_COOKIESESSION 226 +#define TLV_TYPE_BUFFERSIZE 227 +#define TLV_TYPE_NOSIGNAL 228 +#define TLV_TYPE_UNRESTRICTED_AUTH 229 +#define TLV_TYPE_FTP_USE_EPRT 230 +#define TLV_TYPE_FTP_CREATE_MISSING_DIRS 231 +#define TLV_TYPE_MAXFILESIZE 232 +#define TLV_TYPE_TCP_NODELAY 233 +#define TLV_TYPE_IGNORE_CONTENT_LENGTH 234 +#define TLV_TYPE_FTP_SKIP_PASV_IP 235 +#define TLV_TYPE_LOCALPORT 236 +#define TLV_TYPE_LOCALPORTRANGE 237 +#define TLV_TYPE_SSL_SESSIONID_CACHE 238 +#define TLV_TYPE_FTP_SSL_CCC 239 +#define TLV_TYPE_CONNECTTIMEOUT_MS 240 +#define TLV_TYPE_HTTP_TRANSFER_DECODING 241 +#define TLV_TYPE_HTTP_CONTENT_DECODING 242 +#define TLV_TYPE_NEW_FILE_PERMS 243 +#define TLV_TYPE_NEW_DIRECTORY_PERMS 244 +#define TLV_TYPE_PROXY_TRANSFER_MODE 245 +#define TLV_TYPE_ADDRESS_SCOPE 246 +#define TLV_TYPE_CERTINFO 247 +#define TLV_TYPE_TFTP_BLKSIZE 248 +#define TLV_TYPE_SOCKS5_GSSAPI_NEC 249 +#define TLV_TYPE_FTP_USE_PRET 250 +#define TLV_TYPE_RTSP_SERVER_CSEQ 251 +#define TLV_TYPE_TRANSFER_ENCODING 252 +#define TLV_TYPE_ACCEPTTIMEOUT_MS 253 +#define TLV_TYPE_TCP_KEEPALIVE 254 +#define TLV_TYPE_TCP_KEEPIDLE 255 +#define TLV_TYPE_TCP_KEEPINTVL 256 +#define TLV_TYPE_SASL_IR 257 +#define TLV_TYPE_SSL_ENABLE_ALPN 258 +#define TLV_TYPE_EXPECT_100_TIMEOUT_MS 259 +#define TLV_TYPE_SSL_VERIFYSTATUS 260 +#define TLV_TYPE_SSL_FALSESTART 261 +#define TLV_TYPE_PATH_AS_IS 262 +#define TLV_TYPE_PIPEWAIT 263 +#define TLV_TYPE_STREAM_WEIGHT 264 +#define TLV_TYPE_TFTP_NO_OPTIONS 265 +#define TLV_TYPE_TCP_FASTOPEN 266 +#define TLV_TYPE_KEEP_SENDING_ON_ERROR 267 +#define TLV_TYPE_PROXY_SSL_VERIFYPEER 268 +#define TLV_TYPE_PROXY_SSL_VERIFYHOST 269 +#define TLV_TYPE_PROXY_SSL_OPTIONS 270 +#define TLV_TYPE_SUPPRESS_CONNECT_HEADERS 271 +#define TLV_TYPE_SOCKS5_AUTH 272 +#define TLV_TYPE_SSH_COMPRESSION 273 +#define TLV_TYPE_HAPPY_EYEBALLS_TIMEOUT_MS 274 +#define TLV_TYPE_HAPROXYPROTOCOL 275 +#define TLV_TYPE_DNS_SHUFFLE_ADDRESSES 276 +#define TLV_TYPE_DISALLOW_USERNAME_IN_URL 277 +#define TLV_TYPE_UPLOAD_BUFFERSIZE 278 +#define TLV_TYPE_UPKEEP_INTERVAL_MS 279 +#define TLV_TYPE_HTTP09_ALLOWED 280 +#define TLV_TYPE_ALTSVC_CTRL 281 +#define TLV_TYPE_MAXAGE_CONN 282 +#define TLV_TYPE_MAIL_RCPT_ALLOWFAILS 283 +#define TLV_TYPE_HSTS_CTRL 284 +#define TLV_TYPE_DOH_SSL_VERIFYPEER 285 +#define TLV_TYPE_DOH_SSL_VERIFYHOST 286 +#define TLV_TYPE_DOH_SSL_VERIFYSTATUS 287 +#define TLV_TYPE_MAXLIFETIME_CONN 288 +#define TLV_TYPE_MIME_OPTIONS 289 +#define TLV_TYPE_CA_CACHE_TIMEOUT 290 +#define TLV_TYPE_QUICK_EXIT 291 +#define TLV_TYPE_SERVER_RESPONSE_TIMEOUT_MS 292 +#define TLV_TYPE_TCP_KEEPCNT 293 + +#define TLV_TYPE_SSLVERSION 300 +#define TLV_TYPE_TIMECONDITION 301 +#define TLV_TYPE_PROXYAUTH 302 +#define TLV_TYPE_IPRESOLVE 303 +#define TLV_TYPE_USE_SSL 304 +#define TLV_TYPE_FTPSSLAUTH 305 +#define TLV_TYPE_FTP_FILEMETHOD 306 +#define TLV_TYPE_SSH_AUTH_TYPES 307 +#define TLV_TYPE_POSTREDIR 308 +#define TLV_TYPE_GSSAPI_DELEGATION 309 +#define TLV_TYPE_SSL_OPTIONS 310 +#define TLV_TYPE_HEADEROPT 311 +#define TLV_TYPE_PROXY_SSLVERSION 312 + +#define TLV_TYPE_RESUME_FROM_LARGE 320 +#define TLV_TYPE_MAXFILESIZE_LARGE 321 +#define TLV_TYPE_POSTFIELDSIZE_LARGE 322 +#define TLV_TYPE_MAX_SEND_SPEED_LARGE 323 +#define TLV_TYPE_MAX_RECV_SPEED_LARGE 324 +#define TLV_TYPE_TIMEVALUE_LARGE 325 /** * TLV function return codes. diff --git a/curl_fuzzer_tlv.cc b/curl_fuzzer_tlv.cc index 410cb31e..07de82e2 100644 --- a/curl_fuzzer_tlv.cc +++ b/curl_fuzzer_tlv.cc @@ -212,6 +212,120 @@ int fuzz_parse_tlv(FUZZ_DATA *fuzz, TLV *tlv) FU32TLV(fuzz, TLV_TYPE_WS_OPTIONS, CURLOPT_WS_OPTIONS); FU32TLV(fuzz, TLV_TYPE_CONNECT_ONLY, CURLOPT_CONNECT_ONLY); FU32TLV(fuzz, TLV_TYPE_POST, CURLOPT_POST); + FU32TLV(fuzz, TLV_TYPE_PROXYTYPE, CURLOPT_PROXYTYPE); + FU32TLV(fuzz, TLV_TYPE_PORT, CURLOPT_PORT); + FU32TLV(fuzz, TLV_TYPE_LOW_SPEED_LIMIT, CURLOPT_LOW_SPEED_LIMIT); + FU32TLV(fuzz, TLV_TYPE_LOW_SPEED_TIME, CURLOPT_LOW_SPEED_TIME); + FU32TLV(fuzz, TLV_TYPE_RESUME_FROM, CURLOPT_RESUME_FROM); + FU32TLV(fuzz, TLV_TYPE_TIMEVALUE, CURLOPT_TIMEVALUE); + FU32TLV(fuzz, TLV_TYPE_NOPROGRESS, CURLOPT_NOPROGRESS); + FU32TLV(fuzz, TLV_TYPE_FAILONERROR, CURLOPT_FAILONERROR); + FU32TLV(fuzz, TLV_TYPE_DIRLISTONLY, CURLOPT_DIRLISTONLY); + FU32TLV(fuzz, TLV_TYPE_APPEND, CURLOPT_APPEND); + FU32TLV(fuzz, TLV_TYPE_TRANSFERTEXT, CURLOPT_TRANSFERTEXT); + FU32TLV(fuzz, TLV_TYPE_AUTOREFERER, CURLOPT_AUTOREFERER); + FU32TLV(fuzz, TLV_TYPE_PROXYPORT, CURLOPT_PROXYPORT); + // too easy for API misuse FU32TLV(fuzz, TLV_TYPE_POSTFIELDSIZE, CURLOPT_POSTFIELDSIZE); + FU32TLV(fuzz, TLV_TYPE_HTTPPROXYTUNNEL, CURLOPT_HTTPPROXYTUNNEL); + FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYPEER); + FU32TLV(fuzz, TLV_TYPE_MAXREDIRS, CURLOPT_MAXREDIRS); + FU32TLV(fuzz, TLV_TYPE_FILETIME, CURLOPT_FILETIME); + FU32TLV(fuzz, TLV_TYPE_MAXCONNECTS, CURLOPT_MAXCONNECTS); + FU32TLV(fuzz, TLV_TYPE_FRESH_CONNECT, CURLOPT_FRESH_CONNECT); + FU32TLV(fuzz, TLV_TYPE_FORBID_REUSE, CURLOPT_FORBID_REUSE); + FU32TLV(fuzz, TLV_TYPE_CONNECTTIMEOUT, CURLOPT_CONNECTTIMEOUT); + FU32TLV(fuzz, TLV_TYPE_HTTPGET, CURLOPT_HTTPGET); + FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYHOST); + FU32TLV(fuzz, TLV_TYPE_FTP_USE_EPSV, CURLOPT_FTP_USE_EPSV); + FU32TLV(fuzz, TLV_TYPE_SSLENGINE_DEFAULT, CURLOPT_SSLENGINE_DEFAULT); + FU32TLV(fuzz, TLV_TYPE_DNS_CACHE_TIMEOUT, CURLOPT_DNS_CACHE_TIMEOUT); + FU32TLV(fuzz, TLV_TYPE_COOKIESESSION, CURLOPT_COOKIESESSION); + FU32TLV(fuzz, TLV_TYPE_BUFFERSIZE, CURLOPT_BUFFERSIZE); + FU32TLV(fuzz, TLV_TYPE_NOSIGNAL, CURLOPT_NOSIGNAL); + FU32TLV(fuzz, TLV_TYPE_UNRESTRICTED_AUTH, CURLOPT_UNRESTRICTED_AUTH); + FU32TLV(fuzz, TLV_TYPE_FTP_USE_EPRT, CURLOPT_FTP_USE_EPRT); + FU32TLV(fuzz, TLV_TYPE_FTP_CREATE_MISSING_DIRS, CURLOPT_FTP_CREATE_MISSING_DIRS); + FU32TLV(fuzz, TLV_TYPE_MAXFILESIZE, CURLOPT_MAXFILESIZE); + FU32TLV(fuzz, TLV_TYPE_TCP_NODELAY, CURLOPT_TCP_NODELAY); + FU32TLV(fuzz, TLV_TYPE_IGNORE_CONTENT_LENGTH, CURLOPT_IGNORE_CONTENT_LENGTH); + FU32TLV(fuzz, TLV_TYPE_FTP_SKIP_PASV_IP, CURLOPT_FTP_SKIP_PASV_IP); + FU32TLV(fuzz, TLV_TYPE_LOCALPORT, CURLOPT_LOCALPORT); + FU32TLV(fuzz, TLV_TYPE_LOCALPORTRANGE, CURLOPT_LOCALPORTRANGE); + FU32TLV(fuzz, TLV_TYPE_SSL_SESSIONID_CACHE, CURLOPT_SSL_SESSIONID_CACHE); + FU32TLV(fuzz, TLV_TYPE_FTP_SSL_CCC, CURLOPT_FTP_SSL_CCC); + FU32TLV(fuzz, TLV_TYPE_CONNECTTIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS); + FU32TLV(fuzz, TLV_TYPE_HTTP_TRANSFER_DECODING, CURLOPT_HTTP_TRANSFER_DECODING); + FU32TLV(fuzz, TLV_TYPE_HTTP_CONTENT_DECODING, CURLOPT_HTTP_CONTENT_DECODING); + FU32TLV(fuzz, TLV_TYPE_NEW_FILE_PERMS, CURLOPT_NEW_FILE_PERMS); + FU32TLV(fuzz, TLV_TYPE_NEW_DIRECTORY_PERMS, CURLOPT_NEW_DIRECTORY_PERMS); + FU32TLV(fuzz, TLV_TYPE_PROXY_TRANSFER_MODE, CURLOPT_PROXY_TRANSFER_MODE); + FU32TLV(fuzz, TLV_TYPE_ADDRESS_SCOPE, CURLOPT_ADDRESS_SCOPE); + FU32TLV(fuzz, TLV_TYPE_CERTINFO, CURLOPT_CERTINFO); + FU32TLV(fuzz, TLV_TYPE_TFTP_BLKSIZE, CURLOPT_TFTP_BLKSIZE); + FU32TLV(fuzz, TLV_TYPE_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_NEC); + FU32TLV(fuzz, TLV_TYPE_FTP_USE_PRET, CURLOPT_FTP_USE_PRET); + FU32TLV(fuzz, TLV_TYPE_RTSP_SERVER_CSEQ, CURLOPT_RTSP_SERVER_CSEQ); + FU32TLV(fuzz, TLV_TYPE_TRANSFER_ENCODING, CURLOPT_TRANSFER_ENCODING); + FU32TLV(fuzz, TLV_TYPE_ACCEPTTIMEOUT_MS, CURLOPT_ACCEPTTIMEOUT_MS); + FU32TLV(fuzz, TLV_TYPE_TCP_KEEPALIVE, CURLOPT_TCP_KEEPALIVE); + FU32TLV(fuzz, TLV_TYPE_TCP_KEEPIDLE, CURLOPT_TCP_KEEPIDLE); + FU32TLV(fuzz, TLV_TYPE_TCP_KEEPINTVL, CURLOPT_TCP_KEEPINTVL); + FU32TLV(fuzz, TLV_TYPE_SASL_IR, CURLOPT_SASL_IR); + FU32TLV(fuzz, TLV_TYPE_SSL_ENABLE_ALPN, CURLOPT_SSL_ENABLE_ALPN); + FU32TLV(fuzz, TLV_TYPE_EXPECT_100_TIMEOUT_MS, CURLOPT_EXPECT_100_TIMEOUT_MS); + FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYSTATUS, CURLOPT_SSL_VERIFYSTATUS); + FU32TLV(fuzz, TLV_TYPE_SSL_FALSESTART, CURLOPT_SSL_FALSESTART); + FU32TLV(fuzz, TLV_TYPE_PATH_AS_IS, CURLOPT_PATH_AS_IS); + FU32TLV(fuzz, TLV_TYPE_PIPEWAIT, CURLOPT_PIPEWAIT); + FU32TLV(fuzz, TLV_TYPE_STREAM_WEIGHT, CURLOPT_STREAM_WEIGHT); + FU32TLV(fuzz, TLV_TYPE_TFTP_NO_OPTIONS, CURLOPT_TFTP_NO_OPTIONS); + FU32TLV(fuzz, TLV_TYPE_TCP_FASTOPEN, CURLOPT_TCP_FASTOPEN); + FU32TLV(fuzz, TLV_TYPE_KEEP_SENDING_ON_ERROR, CURLOPT_KEEP_SENDING_ON_ERROR); + FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_VERIFYPEER, CURLOPT_PROXY_SSL_VERIFYPEER); + FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_VERIFYHOST, CURLOPT_PROXY_SSL_VERIFYHOST); + FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_OPTIONS, CURLOPT_PROXY_SSL_OPTIONS); + FU32TLV(fuzz, TLV_TYPE_SUPPRESS_CONNECT_HEADERS, CURLOPT_SUPPRESS_CONNECT_HEADERS); + FU32TLV(fuzz, TLV_TYPE_SOCKS5_AUTH, CURLOPT_SOCKS5_AUTH); + FU32TLV(fuzz, TLV_TYPE_SSH_COMPRESSION, CURLOPT_SSH_COMPRESSION); + FU32TLV(fuzz, TLV_TYPE_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS); + FU32TLV(fuzz, TLV_TYPE_HAPROXYPROTOCOL, CURLOPT_HAPROXYPROTOCOL); + FU32TLV(fuzz, TLV_TYPE_DNS_SHUFFLE_ADDRESSES, CURLOPT_DNS_SHUFFLE_ADDRESSES); + FU32TLV(fuzz, TLV_TYPE_DISALLOW_USERNAME_IN_URL, CURLOPT_DISALLOW_USERNAME_IN_URL); + FU32TLV(fuzz, TLV_TYPE_UPLOAD_BUFFERSIZE, CURLOPT_UPLOAD_BUFFERSIZE); + FU32TLV(fuzz, TLV_TYPE_UPKEEP_INTERVAL_MS, CURLOPT_UPKEEP_INTERVAL_MS); + FU32TLV(fuzz, TLV_TYPE_HTTP09_ALLOWED, CURLOPT_HTTP09_ALLOWED); + FU32TLV(fuzz, TLV_TYPE_ALTSVC_CTRL, CURLOPT_ALTSVC_CTRL); + FU32TLV(fuzz, TLV_TYPE_MAXAGE_CONN, CURLOPT_MAXAGE_CONN); + FU32TLV(fuzz, TLV_TYPE_MAIL_RCPT_ALLOWFAILS, CURLOPT_MAIL_RCPT_ALLOWFAILS); + FU32TLV(fuzz, TLV_TYPE_HSTS_CTRL, CURLOPT_HSTS_CTRL); + FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYPEER, CURLOPT_DOH_SSL_VERIFYPEER); + FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYHOST, CURLOPT_DOH_SSL_VERIFYHOST); + FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYSTATUS, CURLOPT_DOH_SSL_VERIFYSTATUS); + FU32TLV(fuzz, TLV_TYPE_MAXLIFETIME_CONN, CURLOPT_MAXLIFETIME_CONN); + FU32TLV(fuzz, TLV_TYPE_MIME_OPTIONS, CURLOPT_MIME_OPTIONS); + FU32TLV(fuzz, TLV_TYPE_CA_CACHE_TIMEOUT, CURLOPT_CA_CACHE_TIMEOUT); + FU32TLV(fuzz, TLV_TYPE_QUICK_EXIT, CURLOPT_QUICK_EXIT); + FU32TLV(fuzz, TLV_TYPE_SERVER_RESPONSE_TIMEOUT_MS, CURLOPT_SERVER_RESPONSE_TIMEOUT_MS); + FU32TLV(fuzz, TLV_TYPE_TCP_KEEPCNT, CURLOPT_TCP_KEEPCNT); + FU32TLV(fuzz, TLV_TYPE_SSLVERSION, CURLOPT_SSLVERSION); + FU32TLV(fuzz, TLV_TYPE_TIMECONDITION, CURLOPT_TIMECONDITION); + FU32TLV(fuzz, TLV_TYPE_PROXYAUTH, CURLOPT_PROXYAUTH); + FU32TLV(fuzz, TLV_TYPE_IPRESOLVE, CURLOPT_IPRESOLVE); + FU32TLV(fuzz, TLV_TYPE_USE_SSL, CURLOPT_USE_SSL); + FU32TLV(fuzz, TLV_TYPE_FTPSSLAUTH, CURLOPT_FTPSSLAUTH); + FU32TLV(fuzz, TLV_TYPE_FTP_FILEMETHOD, CURLOPT_FTP_FILEMETHOD); + FU32TLV(fuzz, TLV_TYPE_SSH_AUTH_TYPES, CURLOPT_SSH_AUTH_TYPES); + FU32TLV(fuzz, TLV_TYPE_POSTREDIR, CURLOPT_POSTREDIR); + FU32TLV(fuzz, TLV_TYPE_GSSAPI_DELEGATION, CURLOPT_GSSAPI_DELEGATION); + FU32TLV(fuzz, TLV_TYPE_SSL_OPTIONS, CURLOPT_SSL_OPTIONS); + FU32TLV(fuzz, TLV_TYPE_HEADEROPT, CURLOPT_HEADEROPT); + FU32TLV(fuzz, TLV_TYPE_PROXY_SSLVERSION, CURLOPT_PROXY_SSLVERSION); + FU32TLV(fuzz, TLV_TYPE_RESUME_FROM_LARGE, CURLOPT_RESUME_FROM_LARGE); + FU32TLV(fuzz, TLV_TYPE_MAXFILESIZE_LARGE, CURLOPT_MAXFILESIZE_LARGE); + // too easy for API misuse FU32TLV(fuzz, TLV_TYPE_POSTFIELDSIZE_LARGE, CURLOPT_POSTFIELDSIZE_LARGE); + FU32TLV(fuzz, TLV_TYPE_MAX_SEND_SPEED_LARGE, CURLOPT_MAX_SEND_SPEED_LARGE); + FU32TLV(fuzz, TLV_TYPE_MAX_RECV_SPEED_LARGE, CURLOPT_MAX_RECV_SPEED_LARGE); + FU32TLV(fuzz, TLV_TYPE_TIMEVALUE_LARGE, CURLOPT_TIMEVALUE_LARGE); /* Define a set of singleton TLVs - they can only have their value set once and all follow the same pattern. */ @@ -233,7 +347,69 @@ int fuzz_parse_tlv(FUZZ_DATA *fuzz, TLV *tlv) FSINGLETONTLV(fuzz, TLV_TYPE_USERPWD, CURLOPT_USERPWD); FSINGLETONTLV(fuzz, TLV_TYPE_USERAGENT, CURLOPT_USERAGENT); FSINGLETONTLV(fuzz, TLV_TYPE_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256); - + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY, CURLOPT_PROXY); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXYUSERPWD, CURLOPT_PROXYUSERPWD); + FSINGLETONTLV(fuzz, TLV_TYPE_REFERER, CURLOPT_REFERER); + FSINGLETONTLV(fuzz, TLV_TYPE_FTPPORT, CURLOPT_FTPPORT); + FSINGLETONTLV(fuzz, TLV_TYPE_SSLCERT, CURLOPT_SSLCERT); + FSINGLETONTLV(fuzz, TLV_TYPE_KEYPASSWD, CURLOPT_KEYPASSWD); + FSINGLETONTLV(fuzz, TLV_TYPE_INTERFACE, CURLOPT_INTERFACE); + FSINGLETONTLV(fuzz, TLV_TYPE_KRBLEVEL, CURLOPT_KRBLEVEL); + FSINGLETONTLV(fuzz, TLV_TYPE_CAINFO, CURLOPT_CAINFO); + FSINGLETONTLV(fuzz, TLV_TYPE_SSL_CIPHER_LIST, CURLOPT_SSL_CIPHER_LIST); + FSINGLETONTLV(fuzz, TLV_TYPE_SSLCERTTYPE, CURLOPT_SSLCERTTYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_SSLKEY, CURLOPT_SSLKEY); + FSINGLETONTLV(fuzz, TLV_TYPE_SSLKEYTYPE, CURLOPT_SSLKEYTYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_SSLENGINE, CURLOPT_SSLENGINE); + FSINGLETONTLV(fuzz, TLV_TYPE_CAPATH, CURLOPT_CAPATH); + FSINGLETONTLV(fuzz, TLV_TYPE_FTP_ACCOUNT, CURLOPT_FTP_ACCOUNT); + FSINGLETONTLV(fuzz, TLV_TYPE_COOKIELIST, CURLOPT_COOKIELIST); + FSINGLETONTLV(fuzz, TLV_TYPE_FTP_ALTERNATIVE_TO_USER, CURLOPT_FTP_ALTERNATIVE_TO_USER); + FSINGLETONTLV(fuzz, TLV_TYPE_SSH_PUBLIC_KEYFILE, CURLOPT_SSH_PUBLIC_KEYFILE); + FSINGLETONTLV(fuzz, TLV_TYPE_SSH_PRIVATE_KEYFILE, CURLOPT_SSH_PRIVATE_KEYFILE); + FSINGLETONTLV(fuzz, TLV_TYPE_SSH_HOST_PUBLIC_KEY_MD5, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5); + FSINGLETONTLV(fuzz, TLV_TYPE_ISSUERCERT, CURLOPT_ISSUERCERT); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXYUSERNAME, CURLOPT_PROXYUSERNAME); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXYPASSWORD, CURLOPT_PROXYPASSWORD); + FSINGLETONTLV(fuzz, TLV_TYPE_NOPROXY, CURLOPT_NOPROXY); + FSINGLETONTLV(fuzz, TLV_TYPE_SSH_KNOWNHOSTS, CURLOPT_SSH_KNOWNHOSTS); + FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_USERNAME, CURLOPT_TLSAUTH_USERNAME); + FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_PASSWORD, CURLOPT_TLSAUTH_PASSWORD); + FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_TYPE, CURLOPT_TLSAUTH_TYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_DNS_SERVERS, CURLOPT_DNS_SERVERS); + FSINGLETONTLV(fuzz, TLV_TYPE_DNS_INTERFACE, CURLOPT_DNS_INTERFACE); + FSINGLETONTLV(fuzz, TLV_TYPE_DNS_LOCAL_IP4, CURLOPT_DNS_LOCAL_IP4); + FSINGLETONTLV(fuzz, TLV_TYPE_DNS_LOCAL_IP6, CURLOPT_DNS_LOCAL_IP6); + FSINGLETONTLV(fuzz, TLV_TYPE_PINNEDPUBLICKEY, CURLOPT_PINNEDPUBLICKEY); + FSINGLETONTLV(fuzz, TLV_TYPE_UNIX_SOCKET_PATH, CURLOPT_UNIX_SOCKET_PATH); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SERVICE_NAME, CURLOPT_PROXY_SERVICE_NAME); + FSINGLETONTLV(fuzz, TLV_TYPE_SERVICE_NAME, CURLOPT_SERVICE_NAME); + FSINGLETONTLV(fuzz, TLV_TYPE_DEFAULT_PROTOCOL, CURLOPT_DEFAULT_PROTOCOL); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CAINFO, CURLOPT_PROXY_CAINFO); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CAPATH, CURLOPT_PROXY_CAPATH); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_USERNAME, CURLOPT_PROXY_TLSAUTH_USERNAME); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_PASSWORD, CURLOPT_PROXY_TLSAUTH_PASSWORD); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_TYPE, CURLOPT_PROXY_TLSAUTH_TYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLCERT, CURLOPT_PROXY_SSLCERT); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLCERTTYPE, CURLOPT_PROXY_SSLCERTTYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLKEY, CURLOPT_PROXY_SSLKEY); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLKEYTYPE, CURLOPT_PROXY_SSLKEYTYPE); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_KEYPASSWD, CURLOPT_PROXY_KEYPASSWD); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSL_CIPHER_LIST, CURLOPT_PROXY_SSL_CIPHER_LIST); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CRLFILE, CURLOPT_PROXY_CRLFILE); + FSINGLETONTLV(fuzz, TLV_TYPE_PRE_PROXY, CURLOPT_PRE_PROXY); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_PINNEDPUBLICKEY, CURLOPT_PROXY_PINNEDPUBLICKEY); + FSINGLETONTLV(fuzz, TLV_TYPE_ABSTRACT_UNIX_SOCKET, CURLOPT_ABSTRACT_UNIX_SOCKET); + FSINGLETONTLV(fuzz, TLV_TYPE_REQUEST_TARGET, CURLOPT_REQUEST_TARGET); + FSINGLETONTLV(fuzz, TLV_TYPE_TLS13_CIPHERS, CURLOPT_TLS13_CIPHERS); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLS13_CIPHERS, CURLOPT_PROXY_TLS13_CIPHERS); + FSINGLETONTLV(fuzz, TLV_TYPE_SASL_AUTHZID, CURLOPT_SASL_AUTHZID); + FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_ISSUERCERT, CURLOPT_PROXY_ISSUERCERT); + FSINGLETONTLV(fuzz, TLV_TYPE_SSL_EC_CURVES, CURLOPT_SSL_EC_CURVES); + FSINGLETONTLV(fuzz, TLV_TYPE_AWS_SIGV4, CURLOPT_AWS_SIGV4); + FSINGLETONTLV(fuzz, TLV_TYPE_REDIR_PROTOCOLS_STR, CURLOPT_REDIR_PROTOCOLS_STR); + FSINGLETONTLV(fuzz, TLV_TYPE_HAPROXY_CLIENT_IP, CURLOPT_HAPROXY_CLIENT_IP); + FSINGLETONTLV(fuzz, TLV_TYPE_ECH, CURLOPT_ECH); default: /* The fuzzer generates lots of unknown TLVs - we don't want these in the corpus so we reject any unknown TLVs. */