Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add more tlvs for completeness #124

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions curl_fuzzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
181 changes: 181 additions & 0 deletions curl_fuzzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a mild preference for these values to be block aligned to the right like the others, but I'm not going to be militant about it.

#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.
Expand Down
178 changes: 177 additions & 1 deletion curl_fuzzer_tlv.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand All @@ -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. */
Expand Down
Loading