Skip to content

Commit 21fa5e1

Browse files
authored
ext/session: session_create_id() now throws a ValueError for large prefix (php#15338)
1 parent 794ba29 commit 21fa5e1

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

ext/session/session.c

+4
Original file line numberDiff line numberDiff line change
@@ -2383,6 +2383,10 @@ PHP_FUNCTION(session_create_id)
23832383
}
23842384

23852385
if (prefix && ZSTR_LEN(prefix)) {
2386+
if (ZSTR_LEN(prefix) > PS_MAX_SID_LENGTH) {
2387+
zend_argument_value_error(1, "cannot be longer than %d characters", PS_MAX_SID_LENGTH);
2388+
RETURN_THROWS();
2389+
}
23862390
if (php_session_valid_key(ZSTR_VAL(prefix)) == FAILURE) {
23872391
/* E_ERROR raised for security reason. */
23882392
php_error_docref(NULL, E_WARNING, "Prefix cannot contain special characters. Only the A-Z, a-z, 0-9, \"-\", and \",\" characters are allowed");

ext/session/tests/session_create_id_invalid_prefix.phpt

+14-7
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,18 @@ session
1212

1313
var_dump(session_create_id('_'));
1414
var_dump(session_create_id('%'));
15-
var_dump(session_create_id("AB\0CD"));
1615

16+
try {
17+
var_dump(session_create_id('ABTgdPs68S3M4HMaqKwj33TzqLMv5PHpWQxJbfpeogEhrJRY7o9f33pKLCmhf0tXCtoBkIu0yxXYCSHfJhPd2miPUW4MIpd91dnEiOwWDfaBnfdJZOwgvgmYLSfDGaebqmnCAoyuzlcq2j59nNRhccgJIkr9ytY3RwFTTXszpcjpx6mlJuG9GksKAhPsnnaEwSEb0eFyqvn80gYI2roKSjaFSmJxg0xgXuCF4csMo8DxiSvovho5QTKx5u7h8VyQL'));
18+
} catch (Throwable $e) {
19+
echo $e::class . ': ' . $e->getMessage() . "\n";
20+
}
21+
22+
try {
23+
var_dump(session_create_id("AB\0CD"));
24+
} catch (Throwable $e) {
25+
echo $e::class . ': ' . $e->getMessage() . "\n";
26+
}
1727

1828
?>
1929
Done
@@ -23,9 +33,6 @@ bool(false)
2333

2434
Warning: session_create_id(): Prefix cannot contain special characters. Only the A-Z, a-z, 0-9, "-", and "," characters are allowed in %s on line %d
2535
bool(false)
26-
27-
Fatal error: Uncaught ValueError: session_create_id(): Argument #1 ($prefix) must not contain any null bytes in %s:%d
28-
Stack trace:
29-
#0 %s(5): session_create_id('AB\x00CD')
30-
#1 {main}
31-
thrown in %s
36+
ValueError: session_create_id(): Argument #1 ($prefix) cannot be longer than 256 characters
37+
ValueError: session_create_id(): Argument #1 ($prefix) must not contain any null bytes
38+
Done

0 commit comments

Comments
 (0)