From 06bfada99bcff9bd2e3a5e959effa2237c07939b Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Fri, 19 Mar 2021 14:47:49 +0100 Subject: Fix #80889: Cannot set save handler when save_handler is invalid There is no need to require a (valid) save_handler to be set, when a user handler is supposed to be set. We just have to make sure, that no user handler is already set in this case. Closes GH-6788. --- NEWS | 4 ++++ ext/session/session.c | 2 +- ext/session/tests/bug80889.phpt | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 ext/session/tests/bug80889.phpt diff --git a/NEWS b/NEWS index d1001e22a2..bfb249e46e 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,10 @@ PHP NEWS . Fixed bug #80783 (PDO ODBC truncates BLOB records at every 256th byte). (cmb) +- Session: + . Fixed bug #80889 (Cannot set save handler when save_handler is invalid). + (cmb) + 01 Apr 2021, PHP 7.4.17 - Core: diff --git a/ext/session/session.c b/ext/session/session.c index d652383b45..1fa9319fcf 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -2031,7 +2031,7 @@ static 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-- + +--INI-- +session.save_handler=whatever +--FILE-- + +--EXPECT-- +string(8) "whatever" +string(4) "user" -- cgit v1.2.1