diff --git a/NEWS b/NEWS index 1cc265f02e8d..4c8ab5f8e188 100644 --- a/NEWS +++ b/NEWS @@ -92,6 +92,10 @@ PHP NEWS . Fixed bug GH-23477 (Memory leak on duplicate native Phar manifest entries). (Weilin Du) +- Session: + . Fixed calling SessionHandler::open() twice without an intervening + close() when re-initializing an active session. (Ilia Alshanetsky) + - SOAP: . Fixed bug GH-23447 (Segfault when a class passed to SoapServer::setClass() fails to initialize). (Lazizbek Ergashev) 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 +)