Commit 3073948885d for php.net

commit 3073948885d95c42ab4ce97109edb2b8f4dc6ed4
Author: ndossche <7771979+ndossche@users.noreply.github.com>
Date:   Tue Mar 10 20:27:48 2026 +0100

    Revert "ext/session: Fix memory leak due to multiple exception happening during session abort"

    This reverts commit 0acde1194513ff69c491f3c1ebe103c3774dc7fd.

    The patch is incorrect as described in GH-21200 in the post-merge
    comments.

diff --git a/NEWS b/NEWS
index 9f2b1ed85e2..5380688ce3d 100644
--- a/NEWS
+++ b/NEWS
@@ -13,10 +13,6 @@ PHP                                                                        NEWS
   . Fixed preprocessor silently guarding PGSQL_SUPPRESS_TIMESTAMPS support
     due to a typo. (KentarouTakeda)

-- Session:
-  . Fix memory leak due to multiple exception happening during session abort.
-    (arshidkv12)
-
 - SNMP:
   . Fixed bug GH-21336 (SNMP::setSecurity() undefined behavior with
     NULL arguments). (David Carlier)
diff --git a/ext/session/session.c b/ext/session/session.c
index f8d963b4894..70e1673d87f 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -41,7 +41,6 @@
 #include "ext/standard/url_scanner_ex.h"
 #include "ext/standard/info.h"
 #include "zend_smart_str.h"
-#include "zend_exceptions.h"
 #include "ext/standard/url.h"
 #include "ext/standard/basic_functions.h"
 #include "ext/standard/head.h"
@@ -1744,16 +1743,8 @@ PHPAPI php_session_status php_get_session_status(void)
 static zend_result php_session_abort(void) /* {{{ */
 {
 	if (PS(session_status) == php_session_active) {
-		if ((PS(mod_data) || PS(mod_user_implemented)) && PS(mod)->s_close) {
-			zend_object *old_exception = EG(exception);
-			EG(exception) = NULL;
-
+		if (PS(mod_data) || PS(mod_user_implemented)) {
 			PS(mod)->s_close(&PS(mod_data));
-			if (!EG(exception)) {
-				EG(exception) = old_exception;
-			} else if (old_exception) {
-				zend_exception_set_previous(EG(exception), old_exception);
-			}
 		}
 		PS(session_status) = php_session_none;
 		return SUCCESS;
diff --git a/ext/session/tests/sessionhandler_validateid_return_type.phpt b/ext/session/tests/sessionhandler_validateid_return_type.phpt
deleted file mode 100644
index a1006945882..00000000000
--- a/ext/session/tests/sessionhandler_validateid_return_type.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-SessionHandler::validateId must return bool
---INI--
-session.use_strict_mode=1
---EXTENSIONS--
-session
---SKIPIF--
-<?php include('skipif.inc'); ?>
---FILE--
-<?php
-class MySession extends SessionHandler {
-    public function validateId($key) {
-        return null;
-    }
-}
-
-$handler = new MySession();
-
-try {
-    session_set_save_handler($handler);
-    session_start();
-} catch (TypeError $e) {
-    echo $e->getMessage(), "\n";
-}
-
-session_write_close();
-
-try {
-    session_start();
-} catch (Throwable $e) {
-    echo $e->getMessage(), "\n";
-}
-?>
---EXPECTF--
-Session id must be a string
diff --git a/ext/session/tests/user_session_module/session_set_save_handler_class_012.phpt b/ext/session/tests/user_session_module/session_set_save_handler_class_012.phpt
index a532dff7f82..f96206efbb6 100644
--- a/ext/session/tests/user_session_module/session_set_save_handler_class_012.phpt
+++ b/ext/session/tests/user_session_module/session_set_save_handler_class_012.phpt
@@ -43,8 +43,6 @@ public function read($key): string|false {
 --EXPECTF--
 *** Testing session_set_save_handler() : incorrect arguments for existing handler open ***
 Open:
-
-Warning: SessionHandler::close(): Parent session handler is not open in %s on line %d
 SessionHandler::open() expects exactly 2 arguments, 0 given

 Warning: Undefined global variable $_SESSION in %s on line %d