Commit b0ea8b25375 for php

commit b0ea8b2537565ad5fb04c13a6e85831d54bfc0d7
Merge: 43c60146708 83c59b80530
Author: David Carlier <devnexen@gmail.com>
Date:   Thu Sep 24 11:02:50 2026 +0100

    Merge branch 'PHP-8.4' into PHP-8.5

    * PHP-8.4:
      sapi/cli: Fix crash in the CLI server when a client is reset before being accepted
      ext/curl: Preserve callback lifetime without rejecting callback changes (#23863)

diff --cc ext/curl/tests/curl_callback_lifetime_destructor.phpt
index 00000000000,6611cb90e00..d7c9bddbbc4
mode 000000,100644..100644
--- a/ext/curl/tests/curl_callback_lifetime_destructor.phpt
+++ b/ext/curl/tests/curl_callback_lifetime_destructor.phpt
@@@ -1,0 -1,52 +1,54 @@@
+ --TEST--
+ GH-23814 (Curl callback receivers are destroyed with the callback guard still set)
+ --EXTENSIONS--
+ curl
+ --SKIPIF--
+ <?php
+ if (!in_array('file', curl_version()['protocols'], true)) {
+     die('skip file protocol not supported');
+ }
+ ?>
+ --FILE--
+ <?php
+ class Callback {
+     public function __construct(private CurlHandle $handle) {}
+
+     public function write(CurlHandle $handle, string $data): int {
+         curl_setopt($handle, CURLOPT_WRITEFUNCTION, null);
+         echo "Callback returning\n";
+         return strlen($data);
+     }
+
+     public function __destruct() {
+         foreach (['curl_reset', 'curl_close'] as $function) {
+             try {
+                 $function($this->handle);
+             } catch (Error $e) {
+                 echo $e->getMessage(), "\n";
+             }
+         }
+         curl_setopt($this->handle, CURLOPT_WRITEFUNCTION,
+             static function (CurlHandle $handle, string $data): int {
+                 echo "Callback installed by destructor\n";
+                 return strlen($data);
+             });
+     }
+ }
+
+ $handle = curl_init('file://' . __FILE__);
+ curl_setopt($handle, CURLOPT_WRITEFUNCTION, [new Callback($handle), 'write']);
+ var_dump(curl_exec($handle));
+ var_dump(curl_exec($handle));
+ curl_reset($handle);
+ echo "Reset outside callback succeeded\n";
+ ?>
 ---EXPECT--
++--EXPECTF--
+ Callback returning
+ curl_reset(): Attempt to reset cURL handle from a callback
++
++Deprecated: Function curl_close() is deprecated since 8.5, as it has no effect since PHP 8.0 in %s on line %d
+ curl_close(): Attempt to close cURL handle from a callback
+ bool(true)
+ Callback installed by destructor
+ bool(true)
+ Reset outside callback succeeded