mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Fix cookie expiry time calculation on 32bit systems.
strtotime() misbehaves on 32bit systems when the resulting timestamp would overflow an integer. Use a DateTime to workaround this issue. Fixes #3868
This commit is contained in:
parent
027cfe9496
commit
3aa189eb3a
2 changed files with 29 additions and 4 deletions
|
@ -387,20 +387,20 @@ class CookieComponent extends Component {
|
|||
* @return integer Unix timestamp
|
||||
*/
|
||||
protected function _expire($expires = null) {
|
||||
$now = time();
|
||||
if (is_null($expires)) {
|
||||
return $this->_expires;
|
||||
}
|
||||
$this->_reset = $this->_expires;
|
||||
|
||||
if (!$expires) {
|
||||
return $this->_expires = 0;
|
||||
}
|
||||
$now = new DateTime();
|
||||
|
||||
if (is_int($expires) || is_numeric($expires)) {
|
||||
return $this->_expires = $now + intval($expires);
|
||||
return $this->_expires = $now->format('U') + intval($expires);
|
||||
}
|
||||
return $this->_expires = strtotime($expires, $now);
|
||||
$now->modify($expires);
|
||||
return $this->_expires = $now->format('U');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -201,6 +201,31 @@ class CookieComponentTest extends CakeTestCase {
|
|||
$this->assertEquals('value', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test write with distant future cookies
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testWriteFarFuture() {
|
||||
$this->Cookie->write('Testing', 'value', false, '+90 years');
|
||||
$future = new DateTime('now');
|
||||
$future->modify('+90 years');
|
||||
|
||||
$expected = array(
|
||||
'name' => $this->Cookie->name . '[Testing]',
|
||||
'value' => 'value',
|
||||
'path' => '/',
|
||||
'domain' => '',
|
||||
'secure' => false,
|
||||
'httpOnly' => false);
|
||||
$result = $this->Controller->response->cookie($this->Cookie->name . '[Testing]');
|
||||
|
||||
$this->assertEquals($future->format('U'), $result['expire'], '', 3);
|
||||
unset($result['expire']);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test write with httpOnly cookies
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue