diff --git a/NEWS b/NEWS index a2c65685b4ce..4d8844cfec7e 100644 --- a/NEWS +++ b/NEWS @@ -115,6 +115,8 @@ PHP NEWS is freed while the stream is still open). (Eyüp Can Akman) - Session: + . Fixed calling SessionHandler::open() twice without an intervening close() + when resetting or re-initializing an active session. (iliaal) . Fix corruption in mod_mm. (ndossche) . Fixed bug GH-23043 (broken session id code can cause zend_mm_heap corrupted). (ndossche) diff --git a/ext/session/session.c b/ext/session/session.c index 2073ea55fe1f..abfce3b4b68c 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -420,6 +420,10 @@ static zend_result php_session_initialize(void) /* {{{ */ { zend_string *val = NULL; + if (PS(session_status) == php_session_active) { + php_session_abort(); + } + PS(session_status) = php_session_active; if (!PS(mod)) { diff --git a/ext/session/tests/session_reset_handler_close.phpt b/ext/session/tests/session_reset_handler_close.phpt new file mode 100644 index 000000000000..54bfc6b7f1d1 --- /dev/null +++ b/ext/session/tests/session_reset_handler_close.phpt @@ -0,0 +1,60 @@ +--TEST-- +Session reset closes the save handler before reopening it +--INI-- +session.use_cookies=0 +session.gc_probability=0 +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +Array +( + [0] => open + [1] => read + [2] => close + [3] => open + [4] => read +)