Skip to content

Commit 83991b6

Browse files
committed
fix: return FAILURE on overflow
1 parent 481e9b7 commit 83991b6

File tree

4 files changed

+18
-46
lines changed

4 files changed

+18
-46
lines changed

ext/session/session.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -713,19 +713,13 @@ static PHP_INI_MH(OnUpdateCookieLifetime)
713713
if (oflow != 0) {
714714
php_error_docref(NULL, E_WARNING, "session.cookie_lifetime must be between 0 and " ZEND_LONG_FMT, maxcookie);
715715
} else {
716-
php_error_docref(NULL, E_WARNING, "session.cookie_lifetime must be an integer");
716+
php_error_docref(NULL, E_WARNING, "session.cookie_lifetime must be of type int");
717717
}
718718
return FAILURE;
719719
}
720-
if (lval < 0) {
720+
if (lval < 0 || lval > maxcookie) {
721721
php_error_docref(NULL, E_WARNING, "session.cookie_lifetime must be between 0 and " ZEND_LONG_FMT, maxcookie);
722722
return FAILURE;
723-
} else if (lval > maxcookie) {
724-
php_error_docref(NULL, E_WARNING, "session.cookie_lifetime must be between 0 and " ZEND_LONG_FMT ", value clamped to maximum", maxcookie);
725-
zend_long *p = ZEND_INI_GET_ADDR();
726-
*p = maxcookie;
727-
entry->value = zend_long_to_str(maxcookie);
728-
return SUCCESS;
729723
}
730724

731725
return OnUpdateLongGEZero(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);

ext/session/tests/gh16290.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ echo "DONE";
1212
ob_end_flush();
1313
?>
1414
--EXPECTF--
15-
Warning: session_set_cookie_params(): session.cookie_lifetime must be between 0 and %d, value clamped to maximum in %s on line %d
15+
Warning: session_set_cookie_params(): session.cookie_lifetime must be between 0 and %d in %s on line %d
1616
DONE

ext/session/tests/session_cookie_lifetime_invalid.phpt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
session.cookie_lifetime rejects non-integer values
2+
session.cookie_lifetime rejects invalid values
33
--EXTENSIONS--
44
session
55
--SKIPIF--
@@ -27,17 +27,29 @@ var_dump(ini_get("session.cookie_lifetime"));
2727
ini_set("session.cookie_lifetime", "-99999999999999999999");
2828
var_dump(ini_get("session.cookie_lifetime"));
2929

30+
// Overflow values are rejected
31+
ini_set("session.cookie_lifetime", PHP_INT_MAX);
32+
var_dump(ini_get("session.cookie_lifetime"));
33+
34+
// Valid values still work after rejection
35+
ini_set("session.cookie_lifetime", 200);
36+
var_dump(ini_get("session.cookie_lifetime"));
37+
3038
ob_end_flush();
3139
?>
3240
--EXPECTF--
33-
Warning: ini_set(): session.cookie_lifetime must be an integer in %s on line %d
41+
Warning: ini_set(): session.cookie_lifetime must be of type int in %s on line %d
3442
string(3) "100"
3543

36-
Warning: ini_set(): session.cookie_lifetime must be an integer in %s on line %d
44+
Warning: ini_set(): session.cookie_lifetime must be of type int in %s on line %d
45+
string(3) "100"
46+
47+
Warning: ini_set(): session.cookie_lifetime must be between 0 and %d in %s on line %d
3748
string(3) "100"
3849

3950
Warning: ini_set(): session.cookie_lifetime must be between 0 and %d in %s on line %d
4051
string(3) "100"
4152

4253
Warning: ini_set(): session.cookie_lifetime must be between 0 and %d in %s on line %d
4354
string(3) "100"
55+
string(3) "200"

ext/session/tests/session_cookie_lifetime_overflow.phpt

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)