From f1d76f52b68f9161cc2b6d3093f151e774c6748b Mon Sep 17 00:00:00 2001 From: offyotto <245704867+offyotto@users.noreply.github.com> Date: Sat, 10 Oct 2026 23:37:51 -0400 Subject: [PATCH] Ignore non-finite parsed Max-Age values --- src/index.ts | 5 ++++- src/parse-set-cookie.spec.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 23fe8ea..8bc6c27 100644 --- a/src/index.ts +++ b/src/index.ts @@ -435,7 +435,10 @@ export function parseSetCookie(str: string, options?: ParseOptions): SetCookie { setCookie.path = val; break; case "max-age": - if (val && maxAgeRegExp.test(val)) setCookie.maxAge = Number(val); + if (val && maxAgeRegExp.test(val)) { + const maxAge = Number(val); + if (Number.isFinite(maxAge)) setCookie.maxAge = maxAge; + } break; case "expires": if (!val) break; diff --git a/src/parse-set-cookie.spec.ts b/src/parse-set-cookie.spec.ts index 89d4851..6a7ce96 100644 --- a/src/parse-set-cookie.spec.ts +++ b/src/parse-set-cookie.spec.ts @@ -164,6 +164,22 @@ describe("cookie.parseSetCookie", () => { }); }); + it.each(["9".repeat(310), "-" + "9".repeat(310)])( + "should ignore overflowing max-age %s", + (value) => { + expect(parseSetCookie(`key=value; Max-Age=${value}`)).toEqual({ + name: "key", + value: "value", + }); + }, + ); + + it("should retain the previous max-age when a duplicate overflows", () => { + expect( + parseSetCookie(`key=value; Max-Age=60; Max-Age=${"9".repeat(310)}`), + ).toEqual({ name: "key", value: "value", maxAge: 60 }); + }); + it("should parse negative max-age", () => { expect(parseSetCookie("key=value; Max-Age=-1")).toEqual({ name: "key",