From cec20f615db844f1b77a5685ad266452602a98a3 Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Sun, 5 Jun 2022 14:50:23 -0400 Subject: [PATCH] Expose new constants from libcurl 7.62 to 7.80 --- NEWS | 3 + UPGRADING | 78 ++++++++++++++++++- ext/curl/interface.c | 178 +++++++++++++++++++++++++++++++++++++++++++ ext/curl/multi.c | 3 + 4 files changed, 261 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 04e237e04ff..00685a58293 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,9 @@ PHP NEWS . Fixed bug GH-7821 and GH-8418 (Allow arbitrary const expressions in backed enums). (ilutov) +- Curl: + . Added new constants from cURL 7.62 to 7.80. (Pierrick) + - MBString: . Backwards-compatible mappings for 0x5C/0x7E in Shift-JIS are restored, after they had been changed in 8.1.0. (Alex Dowad) diff --git a/UPGRADING b/UPGRADING index dc770ff148a..5ef8b778936 100644 --- a/UPGRADING +++ b/UPGRADING @@ -76,6 +76,7 @@ PHP 8.2 UPGRADE NOTES - Curl: . Added CURLINFO_EFFECTIVE_METHOD option and returning the effective HTTP method in curl_getinfo() return value. + . Exposed multiple new constants from libcurl 7.62 to 7.80. - OCI8: . Added an oci8.prefetch_lob_size directive and oci_set_prefetch_lob() @@ -240,8 +241,83 @@ PHP 8.2 UPGRADE NOTES . LOCALE_NEUTRAL - Curl: - . CURLOPT_XFERINFOFUNCTION + . CURLALTSVC_H1 (libcurl >= 7.64.1) + . CURLALTSVC_H2 (libcurl >= 7.64.1) + . CURLALTSVC_H3 (libcurl >= 7.64.1) + . CURLALTSVC_READONLYFILE (libcurl >= 7.64.1) + . CURLAUTH_AWS_SIGV4 (libcurl >= 7.75.0) + . CURLE_PROXY (libcurl >= 7.73.0) + . CURLFTPMETHOD_DEFAULT + . CURLHSTS_ENABLE (libcurl >= 7.74.0) + . CURLHSTS_READONLYFILE (libcurl >= 7.74.0) + . CURLINFO_PROXY_ERROR (libcurl >= 7.73.0) + . CURLINFO_REFERER (libcurl >= 7.76.0) + . CURLINFO_RETRY_AFTER (libcurl >= 7.66.0) + . CURLMOPT_MAX_CONCURRENT_STREAMS (libcurl >= 7.67.0) + . CURLOPT_ALTSVC_CTRL (libcurl >= 7.64.1) + . CURLOPT_ALTSVC (libcurl >= 7.64.1) + . CURLOPT_AWS_SIGV4 (libcurl >= 7.75.0) + . CURLOPT_CAINFO_BLOB (libcurl >= 7.77.0) + . CURLOPT_DOH_SSL_VERIFYHOST (libcurl >= 7.76.0) + . CURLOPT_DOH_SSL_VERIFYPEER (libcurl >= 7.76.0) + . CURLOPT_DOH_SSL_VERIFYSTATUS (libcurl >= 7.76.0) + . CURLOPT_HSTS_CTRL (libcurl >= 7.74.0) + . CURLOPT_HSTS (libcurl >= 7.74.0) + . CURLOPT_MAIL_RCPT_ALLLOWFAILS (libcurl >= 7.69.0) + . CURLOPT_MAXAGE_CONN (libcurl >= 7.65.0) . CURLOPT_MAXFILESIZE_LARGE + . CURLOPT_MAXLIFETIME_CONN (libcurl >= 7.80.0) + . CURLOPT_PROXY_CAINFO_BLOB (libcurl >= 7.77.0) + . CURLOPT_SASL_AUTHZID (libcurl >= 7.66.0) + . CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 (libcurl >= 7.80.0) + . CURLOPT_SSL_EC_CURVES (libcurl >= 7.73.0) + . CURLOPT_UPKEEP_INTERVAL_MS (libcurl >= 7.62.0) + . CURLOPT_UPLOAD_BUFFERSIZE (libcurl >= 7.62.0) + . CURLOPT_XFERINFOFUNCTION (libcurl >= 7.32.0) + . CURLPROTO_MQTT (libcurl >= 7.71.0) + . CURLPX_BAD_ADDRESS_TYPE (libcurl >= 7.73.0) + . CURLPX_BAD_VERSION (libcurl >= 7.73.0) + . CURLPX_CLOSED (libcurl >= 7.73.0) + . CURLPX_GSSAPI (libcurl >= 7.73.0) + . CURLPX_GSSAPI_PERMSG (libcurl >= 7.73.0) + . CURLPX_GSSAPI_PROTECTION (libcurl >= 7.73.0) + . CURLPX_IDENTD_DIFFER (libcurl >= 7.73.0) + . CURLPX_IDENTD (libcurl >= 7.73.0) + . CURLPX_LONG_HOSTNAME (libcurl >= 7.73.0) + . CURLPX_LONG_PASSWD (libcurl >= 7.73.0) + . CURLPX_LONG_USER (libcurl >= 7.73.0) + . CURLPX_NO_AUTH (libcurl >= 7.73.0) + . CURLPX_OK (libcurl >= 7.73.0) + . CURLPX_RECV_ADDRESS (libcurl >= 7.73.0) + . CURLPX_RECV_AUTH (libcurl >= 7.73.0) + . CURLPX_RECV_CONNECT (libcurl >= 7.73.0) + . CURLPX_RECV_REQACK (libcurl >= 7.73.0) + . CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED (libcurl >= 7.73.0) + . CURLPX_REPLY_COMMAND_NOT_SUPPORTED (libcurl >= 7.73.0) + . CURLPX_REPLY_CONNECTION_REFUSED (libcurl >= 7.73.0) + . CURLPX_REPLY_GENERAL_SERVER_FAILURE (libcurl >= 7.73.0) + . CURLPX_REPLY_HOST_UNREACHABLE (libcurl >= 7.73.0) + . CURLPX_REPLY_NETWORK_UNREACHABLE (libcurl >= 7.73.0) + . CURLPX_REPLY_NOT_ALLOWED (libcurl >= 7.73.0) + . CURLPX_REPLY_TTL_EXPIRED (libcurl >= 7.73.0) + . CURLPX_REPLY_UNASSIGNED (libcurl >= 7.73.0) + . CURLPX_REQUEST_FAILED (libcurl >= 7.73.0) + . CURLPX_RESOLVE_HOST (libcurl >= 7.73.0) + . CURLPX_SEND_AUTH (libcurl >= 7.73.0) + . CURLPX_SEND_CONNECT (libcurl >= 7.73.0) + . CURLPX_SEND_REQUEST (libcurl >= 7.73.0) + . CURLPX_UNKNOWN_FAIL (libcurl >= 7.73.0) + . CURLPX_UNKNOWN_MODE (libcurl >= 7.73.0) + . CURLPX_USER_REJECTED (libcurl >= 7.73.0) + . CURLSSLOPT_AUTO_CLIENT_CERT (libcurl >= 7.77.0) + . CURLSSLOPT_NATIVE_CA (libcurl >= 7.71.0) + . CURLSSLOPT_NO_PARTIALCHAIN (libcurl >= 7.68.0) + . CURLSSLOPT_REVOKE_BEST_EFFORT (libcurl >= 7.70.0) + . CURL_VERSION_GSASL (libcurl >= 7.76.0) + . CURL_VERSION_HSTS (libcurl >= 7.74.0) + . CURL_VERSION_HTTP3 (libcurl >= 7.66.0) + . CURL_VERSION_UNICODE (libcurl >= 7.72.0) + . CURL_VERSION_ZSTD (libcurl >= 7.72.0) - Sockets: . SO_INCOMING_CPU diff --git a/ext/curl/interface.c b/ext/curl/interface.c index ff827aa6972..d3de062205d 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -295,6 +295,22 @@ PHP_MINFO_FUNCTION(curl) #endif #if LIBCURL_VERSION_NUM >= 0x073900 /* 7.57.0 */ {"BROTLI", CURL_VERSION_BROTLI}, +#endif +#if LIBCURL_VERSION_NUM >= 0x074001 /* 7.64.1 */ + {"ALTSVC", CURL_VERSION_ALTSVC}, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 /* 7.66.0 */ + {"HTTP3", CURL_VERSION_HTTP3}, +#endif +#if LIBCURL_VERSION_NUM >= 0x074800 /* 7.72.0 */ + {"UNICODE", CURL_VERSION_UNICODE}, + {"ZSTD", CURL_VERSION_ZSTD}, +#endif +#if LIBCURL_VERSION_NUM >= 0x074a00 /* 7.74.0 */ + {"HSTS", CURL_VERSION_HSTS}, +#endif +#if LIBCURL_VERSION_NUM >= 0x074c00 /* 7.76.0 */ + {"GSASL", CURL_VERSION_GSASL}, #endif {NULL, 0} }; @@ -703,6 +719,7 @@ PHP_MINIT_FUNCTION(curl) REGISTER_CURL_CONSTANT(CURLOPT_LOCALPORTRANGE); /* Available since 7.15.3 */ + REGISTER_CURL_CONSTANT(CURLFTPMETHOD_DEFAULT); REGISTER_CURL_CONSTANT(CURLFTPMETHOD_MULTICWD); REGISTER_CURL_CONSTANT(CURLFTPMETHOD_NOCWD); REGISTER_CURL_CONSTANT(CURLFTPMETHOD_SINGLECWD); @@ -1151,6 +1168,8 @@ PHP_MINIT_FUNCTION(curl) #if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ REGISTER_CURL_CONSTANT(CURLOPT_DOH_URL); + REGISTER_CURL_CONSTANT(CURLOPT_UPKEEP_INTERVAL_MS); + REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD_BUFFERSIZE); #endif #if LIBCURL_VERSION_NUM >= 0x074000 /* Available since 7.64.0 */ @@ -1158,9 +1177,41 @@ PHP_MINIT_FUNCTION(curl) #endif #if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */ + REGISTER_CURL_CONSTANT(CURLALTSVC_H1); + REGISTER_CURL_CONSTANT(CURLALTSVC_H2); + REGISTER_CURL_CONSTANT(CURLALTSVC_H3); + REGISTER_CURL_CONSTANT(CURLALTSVC_READONLYFILE); + REGISTER_CURL_CONSTANT(CURLOPT_ALTSVC); + REGISTER_CURL_CONSTANT(CURLOPT_ALTSVC_CTRL); REGISTER_CURL_CONSTANT(CURL_VERSION_ALTSVC); #endif +#if LIBCURL_VERSION_NUM >= 0x074100 /* Available since 7.65.0 */ + REGISTER_CURL_CONSTANT(CURLOPT_MAXAGE_CONN); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */ + REGISTER_CURL_CONSTANT(CURLOPT_SASL_AUTHZID); + REGISTER_CURL_CONSTANT(CURL_VERSION_HTTP3); + REGISTER_CURL_CONSTANT(CURLINFO_RETRY_AFTER); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074300 /* Available since 7.67.0 */ + REGISTER_CURL_CONSTANT(CURLMOPT_MAX_CONCURRENT_STREAMS); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074400 /* Available since 7.68.0 */ + REGISTER_CURL_CONSTANT(CURLSSLOPT_NO_PARTIALCHAIN); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */ + REGISTER_CURL_CONSTANT(CURLOPT_MAIL_RCPT_ALLLOWFAILS); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074600 /* Available since 7.70.0 */ + REGISTER_CURL_CONSTANT(CURLSSLOPT_REVOKE_BEST_EFFORT); +#endif + #if LIBCURL_VERSION_NUM >= 0x074700 /* Available since 7.71.0 */ REGISTER_CURL_CONSTANT(CURLOPT_ISSUERCERT_BLOB); REGISTER_CURL_CONSTANT(CURLOPT_PROXY_ISSUERCERT); @@ -1169,6 +1220,87 @@ PHP_MINIT_FUNCTION(curl) REGISTER_CURL_CONSTANT(CURLOPT_PROXY_SSLKEY_BLOB); REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT_BLOB); REGISTER_CURL_CONSTANT(CURLOPT_SSLKEY_BLOB); + + REGISTER_CURL_CONSTANT(CURLPROTO_MQTT); + + REGISTER_CURL_CONSTANT(CURLSSLOPT_NATIVE_CA); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074800 /* Available since 7.72.0 */ + REGISTER_CURL_CONSTANT(CURL_VERSION_UNICODE); + REGISTER_CURL_CONSTANT(CURL_VERSION_ZSTD); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074900 /* Available since 7.73.0 */ + REGISTER_CURL_CONSTANT(CURLE_PROXY); + REGISTER_CURL_CONSTANT(CURLINFO_PROXY_ERROR); + REGISTER_CURL_CONSTANT(CURLOPT_SSL_EC_CURVES); + REGISTER_CURL_CONSTANT(CURLPX_BAD_ADDRESS_TYPE); + REGISTER_CURL_CONSTANT(CURLPX_BAD_VERSION); + REGISTER_CURL_CONSTANT(CURLPX_CLOSED); + REGISTER_CURL_CONSTANT(CURLPX_GSSAPI); + REGISTER_CURL_CONSTANT(CURLPX_GSSAPI_PERMSG); + REGISTER_CURL_CONSTANT(CURLPX_GSSAPI_PROTECTION); + REGISTER_CURL_CONSTANT(CURLPX_IDENTD); + REGISTER_CURL_CONSTANT(CURLPX_IDENTD_DIFFER); + REGISTER_CURL_CONSTANT(CURLPX_LONG_HOSTNAME); + REGISTER_CURL_CONSTANT(CURLPX_LONG_PASSWD); + REGISTER_CURL_CONSTANT(CURLPX_LONG_USER); + REGISTER_CURL_CONSTANT(CURLPX_NO_AUTH); + REGISTER_CURL_CONSTANT(CURLPX_OK); + REGISTER_CURL_CONSTANT(CURLPX_RECV_ADDRESS); + REGISTER_CURL_CONSTANT(CURLPX_RECV_AUTH); + REGISTER_CURL_CONSTANT(CURLPX_RECV_CONNECT); + REGISTER_CURL_CONSTANT(CURLPX_RECV_REQACK); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_COMMAND_NOT_SUPPORTED); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_CONNECTION_REFUSED); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_GENERAL_SERVER_FAILURE); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_HOST_UNREACHABLE); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_NETWORK_UNREACHABLE); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_NOT_ALLOWED); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_TTL_EXPIRED); + REGISTER_CURL_CONSTANT(CURLPX_REPLY_UNASSIGNED); + REGISTER_CURL_CONSTANT(CURLPX_REQUEST_FAILED); + REGISTER_CURL_CONSTANT(CURLPX_RESOLVE_HOST); + REGISTER_CURL_CONSTANT(CURLPX_SEND_AUTH); + REGISTER_CURL_CONSTANT(CURLPX_SEND_CONNECT); + REGISTER_CURL_CONSTANT(CURLPX_SEND_REQUEST); + REGISTER_CURL_CONSTANT(CURLPX_UNKNOWN_FAIL); + REGISTER_CURL_CONSTANT(CURLPX_UNKNOWN_MODE); + REGISTER_CURL_CONSTANT(CURLPX_USER_REJECTED); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */ + REGISTER_CURL_CONSTANT(CURLHSTS_ENABLE); + REGISTER_CURL_CONSTANT(CURLHSTS_READONLYFILE); + REGISTER_CURL_CONSTANT(CURLOPT_HSTS); + REGISTER_CURL_CONSTANT(CURLOPT_HSTS_CTRL); + REGISTER_CURL_CONSTANT(CURL_VERSION_HSTS); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074b00 /* Available since 7.75.0 */ + REGISTER_CURL_CONSTANT(CURLAUTH_AWS_SIGV4); + REGISTER_CURL_CONSTANT(CURLOPT_AWS_SIGV4); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */ + REGISTER_CURL_CONSTANT(CURLINFO_REFERER); + REGISTER_CURL_CONSTANT(CURLOPT_DOH_SSL_VERIFYHOST); + REGISTER_CURL_CONSTANT(CURLOPT_DOH_SSL_VERIFYPEER); + REGISTER_CURL_CONSTANT(CURLOPT_DOH_SSL_VERIFYSTATUS); + REGISTER_CURL_CONSTANT(CURL_VERSION_GSASL); +#endif + +#if LIBCURL_VERSION_NUM >= 0x074d00 /* Available since 7.77.0 */ + REGISTER_CURL_CONSTANT(CURLOPT_CAINFO_BLOB); + REGISTER_CURL_CONSTANT(CURLOPT_PROXY_CAINFO_BLOB); + REGISTER_CURL_CONSTANT(CURLSSLOPT_AUTO_CLIENT_CERT); +#endif + +#if LIBCURL_VERSION_NUM >= 0x075000 /* Available since 7.80.0 */ + REGISTER_CURL_CONSTANT(CURLOPT_MAXLIFETIME_CONN); + REGISTER_CURL_CONSTANT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256); #endif REGISTER_CURL_CONSTANT(CURLOPT_SAFE_UPLOAD); @@ -2545,8 +2677,32 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue #if LIBCURL_VERSION_NUM >= 0x073d00 /* Available since 7.61.0 */ case CURLOPT_DISALLOW_USERNAME_IN_URL: #endif +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ + case CURLOPT_UPKEEP_INTERVAL_MS: + case CURLOPT_UPLOAD_BUFFERSIZE: +#endif #if LIBCURL_VERSION_NUM >= 0x074000 /* Available since 7.64.0 */ case CURLOPT_HTTP09_ALLOWED: +#endif +#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */ + case CURLOPT_ALTSVC_CTRL: +#endif +#if LIBCURL_VERSION_NUM >= 0x074100 /* Available since 7.65.0 */ + case CURLOPT_MAXAGE_CONN: +#endif +#if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */ + case CURLOPT_MAIL_RCPT_ALLLOWFAILS: +#endif +#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */ + case CURLOPT_HSTS_CTRL: +#endif +#if LIBCURL_VERSION_NUM >= 0x074c00 /* Available since 7.76.0 */ + case CURLOPT_DOH_SSL_VERIFYHOST: + case CURLOPT_DOH_SSL_VERIFYPEER: + case CURLOPT_DOH_SSL_VERIFYSTATUS: +#endif +#if LIBCURL_VERSION_NUM >= 0x075000 /* Available since 7.80.0 */ + case CURLOPT_MAXLIFETIME_CONN: #endif lval = zval_get_long(zvalue); if ((option == CURLOPT_PROTOCOLS || option == CURLOPT_REDIR_PROTOCOLS) && @@ -2644,8 +2800,23 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue case CURLOPT_PROXY_TLS13_CIPHERS: case CURLOPT_TLS13_CIPHERS: #endif +#if LIBCURL_VERSION_NUM >= 0x074001 /* Available since 7.64.1 */ + case CURLOPT_ALTSVC: +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 /* Available since 7.66.0 */ + case CURLOPT_SASL_AUTHZID: +#endif #if LIBCURL_VERSION_NUM >= 0x074700 /* Available since 7.71.0 */ case CURLOPT_PROXY_ISSUERCERT: +#endif +#if LIBCURL_VERSION_NUM >= 0x074900 /* Available since 7.73.0 */ + case CURLOPT_SSL_EC_CURVES: +#endif +#if LIBCURL_VERSION_NUM >= 0x074b00 /* Available since 7.75.0 */ + case CURLOPT_AWS_SIGV4: +#endif +#if LIBCURL_VERSION_NUM >= 0x075000 /* Available since 7.80.0 */ + case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256: #endif { zend_string *tmp_str; @@ -2672,6 +2843,9 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue #endif #if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ case CURLOPT_DOH_URL: +#endif +#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */ + case CURLOPT_HSTS: #endif case CURLOPT_KRBLEVEL: { @@ -3072,6 +3246,10 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue case CURLOPT_PROXY_SSLKEY_BLOB: case CURLOPT_SSLCERT_BLOB: case CURLOPT_SSLKEY_BLOB: +#if LIBCURL_VERSION_NUM >= 0x074d00 /* Available since 7.77.0 */ + case CURLOPT_CAINFO_BLOB: + case CURLOPT_PROXY_CAINFO_BLOB: +#endif { zend_string *tmp_str; zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 7ac2aa40ce5..fb8f08ccdba 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -441,6 +441,9 @@ static bool _php_curl_multi_setopt(php_curlm *mh, zend_long option, zval *zvalue case CURLMOPT_MAX_HOST_CONNECTIONS: case CURLMOPT_MAX_PIPELINE_LENGTH: case CURLMOPT_MAX_TOTAL_CONNECTIONS: +#endif +#if LIBCURL_VERSION_NUM >= 0x074300 /* Available since 7.67.0 */ + case CURLMOPT_MAX_CONCURRENT_STREAMS: #endif { zend_long lval = zval_get_long(zvalue);