Commit 85cf3ac22f7 for php
commit 85cf3ac22f783b6cd9ee4ac611e3ed04ca74415c
Author: lacatoire <la.catoire@gmail.com>
Date: Wed Nov 4 15:17:45 2026 +0800
ext/curl: Clear CURLOPT_PRIVATE in curl_reset() (#25170)
CURLOPT_PRIVATE is stored only on the PHP side, so curl_easy_reset()
does not clear it. Release the stored value in curl_reset() so
CURLINFO_PRIVATE returns false after reset.
Closes #25170
diff --git a/NEWS b/NEWS
index 8d22dd5d16a..41ba7e3ff87 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 8.4.29
+- Curl:
+ . Fixed curl_reset() retaining CURLOPT_PRIVATE after reset. (lacatoire)
19 Nov 2026, PHP 8.4.28
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index a101e852ee9..b8c6ce7dde3 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -3028,6 +3028,8 @@ PHP_FUNCTION(curl_reset)
}
curl_easy_reset(ch->cp);
+ zval_ptr_dtor(&ch->private_data);
+ ZVAL_UNDEF(&ch->private_data);
_php_curl_reset_handlers(ch);
_php_curl_set_default_options(ch);
}
diff --git a/ext/curl/tests/curl_reset_private.phpt b/ext/curl/tests/curl_reset_private.phpt
new file mode 100644
index 00000000000..400079135cf
--- /dev/null
+++ b/ext/curl/tests/curl_reset_private.phpt
@@ -0,0 +1,15 @@
+--TEST--
+curl_reset(): CURLOPT_PRIVATE is cleared
+--EXTENSIONS--
+curl
+--FILE--
+<?php
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_PRIVATE, "secret-marker");
+var_dump(curl_getinfo($ch, CURLINFO_PRIVATE));
+curl_reset($ch);
+var_dump(curl_getinfo($ch, CURLINFO_PRIVATE));
+?>
+--EXPECT--
+string(13) "secret-marker"
+bool(false)