diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2021-03-19 17:03:35 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2021-03-19 17:03:54 +0100 |
commit | 2a1ed81ffcd50d493cfbabe2a155328081c6e6c8 (patch) | |
tree | 580a3ee1324004d12b6930f7b30cf193e3277d62 /ext | |
parent | 97cfdcd73b4d4816610c61011f02cfa788fee046 (diff) | |
parent | 06bfada99bcff9bd2e3a5e959effa2237c07939b (diff) | |
download | php-git-2a1ed81ffcd50d493cfbabe2a155328081c6e6c8.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Fix #80889: Cannot set save handler when save_handler is invalid
Diffstat (limited to 'ext')
-rw-r--r-- | ext/session/session.c | 2 | ||||
-rw-r--r-- | ext/session/tests/bug80889.phpt | 37 |
2 files changed, 38 insertions, 1 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index a23e3a6384..0277884964 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -2051,7 +2051,7 @@ PHP_FUNCTION(session_set_save_handler) remove_user_shutdown_function("session_shutdown", sizeof("session_shutdown") - 1); } - if (PS(mod) && PS(session_status) != php_session_active && PS(mod) != &ps_mod_user) { + if (PS(session_status) != php_session_active && (!PS(mod) || PS(mod) != &ps_mod_user)) { ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0); ini_val = zend_string_init("user", sizeof("user") - 1, 0); PS(set_handler) = 1; diff --git a/ext/session/tests/bug80889.phpt b/ext/session/tests/bug80889.phpt new file mode 100644 index 0000000000..78e1a6ab64 --- /dev/null +++ b/ext/session/tests/bug80889.phpt @@ -0,0 +1,37 @@ +--TEST-- +Bug #80889 (Cannot set save handler when save_handler is invalid) +--SKIPIF-- +<?php include('skipif.inc'); ?> +--INI-- +session.save_handler=whatever +--FILE-- +<?php +class DummyHandler implements SessionHandlerInterface { + public function open($savePath, $sessionName) { + return true; + } + public function close() { + return true; + } + public function read($id) { + return ''; + } + public function write($id, $data) { + return true; + } + public function destroy($id) { + return true; + } + public function gc($maxlifetime) { + return true; + } +} + +$initHandler = ini_get('session.save_handler'); +session_set_save_handler(new DummyHandler()); +$setHandler = ini_get('session.save_handler'); +var_dump($initHandler, $setHandler); +?> +--EXPECT-- +string(8) "whatever" +string(4) "user" |