Skip to content

Commit 64e589c

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fix #80889: Cannot set save handler when save_handler is invalid
2 parents 5fd2a5b + 2a1ed81 commit 64e589c

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

ext/session/session.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2051,7 +2051,7 @@ PHP_FUNCTION(session_set_save_handler)
20512051
remove_user_shutdown_function("session_shutdown", sizeof("session_shutdown") - 1);
20522052
}
20532053

2054-
if (PS(mod) && PS(session_status) != php_session_active && PS(mod) != &ps_mod_user) {
2054+
if (PS(session_status) != php_session_active && (!PS(mod) || PS(mod) != &ps_mod_user)) {
20552055
ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0);
20562056
ini_val = zend_string_init("user", sizeof("user") - 1, 0);
20572057
PS(set_handler) = 1;

ext/session/tests/bug80889.phpt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
Bug #80889 (Cannot set save handler when save_handler is invalid)
3+
--SKIPIF--
4+
<?php include('skipif.inc'); ?>
5+
--INI--
6+
session.save_handler=whatever
7+
--FILE--
8+
<?php
9+
class DummyHandler implements SessionHandlerInterface {
10+
public function open($savePath, $sessionName) {
11+
return true;
12+
}
13+
public function close() {
14+
return true;
15+
}
16+
public function read($id) {
17+
return '';
18+
}
19+
public function write($id, $data) {
20+
return true;
21+
}
22+
public function destroy($id) {
23+
return true;
24+
}
25+
public function gc($maxlifetime) {
26+
return true;
27+
}
28+
}
29+
30+
$initHandler = ini_get('session.save_handler');
31+
session_set_save_handler(new DummyHandler());
32+
$setHandler = ini_get('session.save_handler');
33+
var_dump($initHandler, $setHandler);
34+
?>
35+
--EXPECT--
36+
string(8) "whatever"
37+
string(4) "user"

0 commit comments

Comments
 (0)