Skip to content

Commit 8b11525

Browse files
committed
Fix GH-9583: session_create_id() fails with user defined save handler that doesn't have a validateId() method
1 parent def8c8d commit 8b11525

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? 2022, PHP 8.0.25
44

5+
- Session:
6+
. Fixed bug GH-9583 (session_create_id() fails with user defined save handler
7+
that doesn't have a validateId() method). (Girgias)
8+
59
29 Sep 2022, PHP 8.0.24
610

711
- Core:

ext/session/session.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1083,8 +1083,9 @@ PHPAPI int php_session_register_module(const ps_module *ptr) /* {{{ */
10831083
/* }}} */
10841084

10851085
/* Dummy PS module function */
1086+
/* We consider any ID valid, so we return FAILURE to indicate that a session doesn't exist */
10861087
PHPAPI int php_session_validate_sid(PS_VALIDATE_SID_ARGS) {
1087-
return SUCCESS;
1088+
return FAILURE;
10881089
}
10891090

10901091
/* Dummy PS module function */

ext/session/tests/gh9583.phpt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--TEST--
2+
GH-9583: session_create_id() fails with user defined save handler that doesn't have a validateId() method
3+
--EXTENSIONS--
4+
session
5+
--SKIPIF--
6+
<?php include('skipif.inc'); ?>
7+
--FILE--
8+
<?php
9+
10+
class SessionHandlerTester implements \SessionHandlerInterface
11+
{
12+
13+
public function close(): bool { return true; }
14+
15+
public function destroy($id): bool { return true; }
16+
17+
public function gc($max_lifetime): int|false { return 1; }
18+
19+
public function open($path, $name): bool { return true; }
20+
21+
public function read($id): string { return ''; }
22+
23+
public function write($id, $data): bool { return true; }
24+
25+
//public function create_sid() { return uniqid(); }
26+
27+
//public function validateId($key) { return true; }
28+
}
29+
30+
$obj = new SessionHandlerTester();
31+
ini_set('session.use_strict_mode','1');
32+
session_set_save_handler($obj);
33+
session_start();
34+
35+
echo "\nvalidateId() ".(method_exists($obj,'validateId')?('returns '.($obj->validateId(1)?'true':'false')):'is commented out');
36+
echo "\n";
37+
$sessionId = session_create_id();
38+
echo "\nSession ID:".$sessionId;
39+
echo "\n";
40+
41+
?>
42+
--EXPECTF--
43+
validateId() is commented out
44+
45+
Session ID:%s

0 commit comments

Comments
 (0)