Skip to content

Commit 15e3fcb

Browse files
committed
Fixed GH-9200: setcookie has an obsolete expires date format
1 parent 9dc6ee9 commit 15e3fcb

File tree

4 files changed

+12
-13
lines changed

4 files changed

+12
-13
lines changed

NEWS

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ PHP NEWS
2525

2626
- Standard:
2727
. Fixed bug #65489 (glob() basedir check is inconsistent). (Jakub Zelenka)
28+
. Fixed GH-9200 (setcookie has an obsolete expires date format). (Derick)
2829
. Fixed GH-9244 (Segfault with array_multisort + array_shift). (cmb)
2930

3031
04 Aug 2022, PHP 8.2.0beta2

ext/standard/head.c

+3-5
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ PHPAPI zend_result php_setcookie(zend_string *name, zend_string *value, time_t e
118118
* so in order to force cookies to be deleted, even on MSIE, we
119119
* pick an expiry date in the past
120120
*/
121-
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, 1, 0);
121+
dt = php_format_date("D, d M Y H:i:s \\G\\M\\T", sizeof("D, d M Y H:i:s \\G\\M\\T")-1, 1, 0);
122122
smart_str_appends(&buf, "Set-Cookie: ");
123123
smart_str_append(&buf, name);
124124
smart_str_appends(&buf, "=deleted; expires=");
@@ -137,14 +137,12 @@ PHPAPI zend_result php_setcookie(zend_string *name, zend_string *value, time_t e
137137
smart_str_append(&buf, value);
138138
}
139139
if (expires > 0) {
140-
const char *p;
141140
double diff;
142141

143142
smart_str_appends(&buf, COOKIE_EXPIRES);
144-
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0);
143+
dt = php_format_date("D, d M Y H:i:s \\G\\M\\T", sizeof("D, d M Y H:i:s \\G\\M\\T")-1, expires, 0);
145144
/* check to make sure that the year does not exceed 4 digits in length */
146-
p = zend_memrchr(ZSTR_VAL(dt), '-', ZSTR_LEN(dt));
147-
if (!p || *(p + 5) != ' ') {
145+
if (php_idate('Y', expires, 0) > 9999) {
148146
zend_string_free(dt);
149147
smart_str_free(&buf);
150148
zend_value_error("%s(): \"expires\" option cannot have a year greater than 9999",

ext/standard/tests/network/bug72071.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ setcookie("name", "value", $date);
1111
?>
1212
--EXPECT--
1313
--EXPECTHEADERS--
14-
Set-Cookie: name=value; expires=Sat, 01-Apr-2017 12:25:39 GMT; Max-Age=0
14+
Set-Cookie: name=value; expires=Sat, 01 Apr 2017 12:25:39 GMT; Max-Age=0

ext/standard/tests/network/setcookie.phpt

+7-7
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ setcookie('name', 'value', ['expires' => $tsp]);
2121
setcookie('name', 'value', ['expires' => $tsn, 'path' => '/path/', 'domain' => 'domain.tld', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict']);
2222

2323
$expected = array(
24-
'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
25-
'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
24+
'Set-Cookie: name=deleted; expires='.date('D, d M Y H:i:s', 1).' GMT; Max-Age=0',
25+
'Set-Cookie: name=deleted; expires='.date('D, d M Y H:i:s', 1).' GMT; Max-Age=0',
2626
'Set-Cookie: name=value',
2727
'Set-Cookie: name=space%20value',
2828
'Set-Cookie: name=value',
29-
'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsp).' GMT; Max-Age=5',
30-
'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsn).' GMT; Max-Age=0',
31-
'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsc).' GMT; Max-Age=0',
29+
'Set-Cookie: name=value; expires='.date('D, d M Y H:i:s', $tsp).' GMT; Max-Age=5',
30+
'Set-Cookie: name=value; expires='.date('D, d M Y H:i:s', $tsn).' GMT; Max-Age=0',
31+
'Set-Cookie: name=value; expires='.date('D, d M Y H:i:s', $tsc).' GMT; Max-Age=0',
3232
'Set-Cookie: name=value; path=/path/',
3333
'Set-Cookie: name=value; domain=domain.tld',
3434
'Set-Cookie: name=value; secure',
3535
'Set-Cookie: name=value; HttpOnly',
36-
'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsp).' GMT; Max-Age=5',
37-
'Set-Cookie: name=value; expires='.date('D, d-M-Y H:i:s', $tsn).' GMT; Max-Age=0; path=/path/; domain=domain.tld; secure; HttpOnly; SameSite=Strict'
36+
'Set-Cookie: name=value; expires='.date('D, d M Y H:i:s', $tsp).' GMT; Max-Age=5',
37+
'Set-Cookie: name=value; expires='.date('D, d M Y H:i:s', $tsn).' GMT; Max-Age=0; path=/path/; domain=domain.tld; secure; HttpOnly; SameSite=Strict'
3838
);
3939

4040
$headers = headers_list();

0 commit comments

Comments
 (0)