Commit 93cb2764e1a for php

commit 93cb2764e1a6e9ccacc3569f46c7fa7a55b1e6ac
Author: Sjoerd Langkemper <sjoerd-github@linuxonly.nl>
Date:   Thu Nov 12 11:07:04 2026 +0100

    ext/curl: Add more options to curl (#22840)

    - CURLOPT_ECH
    - CURLOPT_HAPROXY_CLIENT_IP
    - CURLOPT_SERVER_RESPONSE_TIMEOUT_MS
    - CURLOPT_MAIL_RCPT_ALLOWFAILS (correct spelling of CURLOPT_MAIL_RCPT_ALLLOWFAILS)

diff --git a/UPGRADING b/UPGRADING
index 875e0555456..3fc692ac9ac 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -74,6 +74,8 @@ PHP 8.7 UPGRADE NOTES
 - Curl:
   . Multiple files can now be uploaded with the same field name by passing an
     array of CURLFile or CURLStringFile objects to CURLOPT_POSTFIELDS.
+  . Support for upstream options CURLOPT_ECH, CURLOPT_HAPROXY_CLIENT_IP, and
+    CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.

 - Intl:
   . Added IntlRelativeDateTimeFormatter to format relative date and time offsets
@@ -165,6 +167,12 @@ PHP 8.7 UPGRADE NOTES
 10. New Global Constants
 ========================================

+- Curl:
+  . New options: CURLOPT_ECH, CURLOPT_HAPROXY_CLIENT_IP,
+    CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.
+  . CURLOPT_MAIL_RCPT_ALLOWFAILS is the correctly spelled alternative to
+    CURLOPT_MAIL_RCPT_ALLLOWFAILS.
+
 ========================================
 11. Changes to INI File Handling
 ========================================
diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php
index 6953f0e97cb..bac8694da63 100644
--- a/ext/curl/curl.stub.php
+++ b/ext/curl/curl.stub.php
@@ -77,6 +77,13 @@
  * @cvalue CURLOPT_DNS_USE_GLOBAL_CACHE
  */
 const CURLOPT_DNS_USE_GLOBAL_CACHE = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080800 /* Available since 8.8.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_ECH
+ */
+const CURLOPT_ECH = UNKNOWN;
+#endif
 /**
  * @var int
  * @cvalue CURLOPT_EGDSOCKET
@@ -143,6 +150,13 @@
  * @cvalue CURLOPT_FTP_USE_EPSV
  */
 const CURLOPT_FTP_USE_EPSV = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080200 /* Available since 8.2.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_HAPROXY_CLIENT_IP
+ */
+const CURLOPT_HAPROXY_CLIENT_IP = UNKNOWN;
+#endif
 /**
  * @var int
  * @cvalue CURLOPT_HEADER
@@ -1383,6 +1397,13 @@
  * @cvalue CURLOPT_SERVER_RESPONSE_TIMEOUT
  */
 const CURLOPT_SERVER_RESPONSE_TIMEOUT = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_SERVER_RESPONSE_TIMEOUT_MS
+ */
+const CURLOPT_SERVER_RESPONSE_TIMEOUT_MS = UNKNOWN;
+#endif
 /**
  * @var int
  * @cvalue CURLOPT_IPRESOLVE
@@ -3279,7 +3300,12 @@
 #if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */
 /**
  * @var int
- * @cvalue CURLOPT_MAIL_RCPT_ALLLOWFAILS
+ * @cvalue CURLOPT_MAIL_RCPT_ALLOWFAILS
+ */
+const CURLOPT_MAIL_RCPT_ALLOWFAILS = UNKNOWN;
+/**
+ * @var int
+ * @cvalue CURLOPT_MAIL_RCPT_ALLOWFAILS
  */
 const CURLOPT_MAIL_RCPT_ALLLOWFAILS = UNKNOWN;
 #endif
diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h
index c38d581cb3c..bf47f682b1b 100644
Binary files a/ext/curl/curl_arginfo.h and b/ext/curl/curl_arginfo.h differ
diff --git a/ext/curl/curl_private.h b/ext/curl/curl_private.h
index 25cc37b6e45..f8550dc3f74 100644
--- a/ext/curl/curl_private.h
+++ b/ext/curl/curl_private.h
@@ -26,6 +26,10 @@
 #include <curl/curl.h>
 #include <curl/multi.h>

+#if LIBCURL_VERSION_NUM < 0x080200 /* Available since 8.2.0 */
+# define CURLOPT_MAIL_RCPT_ALLOWFAILS CURLOPT_MAIL_RCPT_ALLLOWFAILS
+#endif
+
 #define CURLOPT_RETURNTRANSFER 19913
 #define CURLOPT_BINARYTRANSFER 19914 /* For Backward compatibility */
 #define PHP_CURL_STDOUT 0
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 94618e4bf74..b94949b784c 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1865,7 +1865,7 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
 		case CURLOPT_MAXAGE_CONN:
 #endif
 #if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */
-		case CURLOPT_MAIL_RCPT_ALLLOWFAILS:
+		case CURLOPT_MAIL_RCPT_ALLOWFAILS:
 #endif
 #if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
 		case CURLOPT_HSTS_CTRL:
@@ -1888,6 +1888,9 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
 		case CURLOPT_CA_CACHE_TIMEOUT:
 		case CURLOPT_QUICK_EXIT:
 #endif
+#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */
+		case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
+#endif
 #if LIBCURL_VERSION_NUM >= 0x080900 /* Available since 8.9.0 */
 		case CURLOPT_TCP_KEEPCNT:
 #endif
@@ -2031,6 +2034,12 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
 		case CURLOPT_PASSWORD:
 #if LIBCURL_VERSION_NUM >= 0x080e00 /* Available since 8.14.0 */
 		case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
+#endif
+#if LIBCURL_VERSION_NUM >= 0x080200 /* Available since 8.2.0 */
+		case CURLOPT_HAPROXY_CLIENT_IP:
+#endif
+#if LIBCURL_VERSION_NUM >= 0x080800 /* Available since 8.8.0 */
+		case CURLOPT_ECH:
 #endif
 		{
 			if (Z_ISNULL_P(zvalue)) {