bug #19827 [BrowserKit] Fix cookie expiration on 32 bit systems (jameshalsall)

This PR was submitted for the master branch but it was merged into the 2.7 branch instead (closes #19827).

Discussion
----------

[BrowserKit] Fix cookie expiration on 32 bit systems

| Q             | A
| ------------- | ---
| Branch?       | 2.7
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #15739
| License       | MIT

On 32-bit systems the cookie expiration value was not being calculated
correctly as it was being fetched as an integer. When the timestamp exceeded
the PHP_INT_MAX size it would return an invalid value, breaking the cookie
construction.

The BrowserKit cookie has now been updated to get the timestamp as a string
which works around this platform limitation (similar to how it works in the Cookie
from HttpFoundation).

Commits
-------

68698f2 [BrowserKit] Fix cookie expiration on 32 bit systems
This commit is contained in:
Fabien Potencier 2016-09-02 13:36:09 -07:00
commit 053d67bcab

View File

@ -76,7 +76,7 @@ class Cookie
throw new \UnexpectedValueException(sprintf('The cookie expiration time "%s" is not valid.', $expires));
}
$this->expires = $timestampAsDateTime->getTimestamp();
$this->expires = $timestampAsDateTime->format('U');
}
}
@ -205,13 +205,13 @@ class Cookie
foreach (self::$dateFormats as $dateFormat) {
if (false !== $date = \DateTime::createFromFormat($dateFormat, $dateValue, new \DateTimeZone('GMT'))) {
return $date->getTimestamp();
return $date->format('U');
}
}
// attempt a fallback for unusual formatting
if (false !== $date = date_create($dateValue, new \DateTimeZone('GMT'))) {
return $date->getTimestamp();
return $date->format('U');
}
throw new \InvalidArgumentException(sprintf('Could not parse date "%s".', $dateValue));
@ -304,6 +304,6 @@ class Cookie
*/
public function isExpired()
{
return null !== $this->expires && 0 !== $this->expires && $this->expires < time();
return null !== $this->expires && 0 != $this->expires && $this->expires < time();
}
}