mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 19:08:50 +00:00
## Summary Fixes #22475 `cookie.isExpired()` was incorrectly returning `false` for cookies with `Expires` set to Unix epoch (Thu, 01 Jan 1970 00:00:00 GMT). ## The Problem The bug had two parts: 1. **In `Cookie::isExpired()`**: The condition `m_expires < 1` incorrectly treated Unix epoch (0) as a session cookie instead of an expired cookie. 2. **In `Cookie::parse()`**: When parsing date strings that evaluate to 0 (Unix epoch), the code used implicit boolean conversion which treated 0 as false, preventing the expires value from being set. ## The Fix - Removed the `m_expires < 1` check from `isExpired()`, keeping only the check for `emptyExpiresAtValue` to identify session cookies - Fixed date parsing to use `std::isfinite()` instead of implicit boolean conversion, properly handling Unix epoch (0) ## Test Plan - Added regression test in `test/regression/issue/22475.test.ts` covering Unix epoch and edge cases - All existing cookie tests pass (`bun bd test test/js/bun/cookie/`) - Manually tested the reported issue from #22475 ```javascript const cookies = [ 'a=; Expires=Thu, 01 Jan 1970 00:00:00 GMT', 'b=; Expires=Thu, 01 Jan 1970 00:00:01 GMT' ]; for (const _cookie of cookies) { const cookie = new Bun.Cookie(_cookie); console.log(cookie.name, cookie.expires, cookie.isExpired()); } ``` Now correctly outputs: ``` a 1970-01-01T00:00:00.000Z true b 1970-01-01T00:00:01.000Z true ``` 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1.9 KiB
1.9 KiB