Skip to content

Commit 2a1ed81

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #80889: Cannot set save handler when save_handler is invalid
2 parents 97cfdcd + 06bfada commit 2a1ed81

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ PHP NEWS
1818
. Fixed bug #80783 (PDO ODBC truncates BLOB records at every 256th byte).
1919
(cmb)
2020

21+
- Session:
22+
. Fixed bug #80889 (Cannot set save handler when save_handler is invalid).
23+
(cmb)
24+
2125
01 Apr 2021, PHP 8.0.4
2226

2327
- Core:

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)