From f32d2baf080d1d614d6a3a6d7aa7353b46f809bd Mon Sep 17 00:00:00 2001 From: Shridhar Deshmukh Date: Tue, 16 Dec 2025 05:54:24 +0100 Subject: [PATCH] fix: preserve `=` padding in parsed cookies (#6789) --- .../better-auth/src/cookies/cookies.test.ts | 37 ++++++++++++++++++- packages/better-auth/src/cookies/index.ts | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/packages/better-auth/src/cookies/cookies.test.ts b/packages/better-auth/src/cookies/cookies.test.ts index 7498f0bf06..e8284e0e64 100644 --- a/packages/better-auth/src/cookies/cookies.test.ts +++ b/packages/better-auth/src/cookies/cookies.test.ts @@ -1,6 +1,11 @@ import type { BetterAuthOptions } from "@better-auth/core"; import { describe, expect, it } from "vitest"; -import { getCookieCache, getCookies, getSessionCookie } from "../cookies"; +import { + getCookieCache, + getCookies, + getSessionCookie, + parseCookies, +} from "../cookies"; import { parseUserOutput } from "../db/schema"; import { getTestInstance } from "../test-utils/test-instance"; import { parseSetCookieHeader } from "./cookie-utils"; @@ -1102,3 +1107,33 @@ describe("Cookie Chunking", () => { expect(cache?.user?.email).toEqual(testUser.email); }); }); + +describe("parse cookies", () => { + it("should parse cookies into key-value map", () => { + const cookieHeader = + "better-auth.session_token=session-token.signature; better-auth.session_data=session-data.signature"; + + const parsedCookies = parseCookies(cookieHeader); + + expect(parsedCookies.get("better-auth.session_token")).toBe( + "session-token.signature", + ); + expect(parsedCookies.get("better-auth.session_data")).toBe( + "session-data.signature", + ); + }); + + it("should securely parse the signed cookies with padding", () => { + const cookieHeader = + "better-auth.session_token=session-token.signature=; better-auth.session_data=session-data.signature="; + + const parsedCookies = parseCookies(cookieHeader); + + expect(parsedCookies.get("better-auth.session_token")).toBe( + "session-token.signature=", + ); + expect(parsedCookies.get("better-auth.session_data")).toBe( + "session-data.signature=", + ); + }); +}); diff --git a/packages/better-auth/src/cookies/index.ts b/packages/better-auth/src/cookies/index.ts index b89a912526..223451c2f4 100644 --- a/packages/better-auth/src/cookies/index.ts +++ b/packages/better-auth/src/cookies/index.ts @@ -352,7 +352,7 @@ export function parseCookies(cookieHeader: string) { const cookieMap = new Map(); cookies.forEach((cookie) => { - const [name, value] = cookie.split("="); + const [name, value] = cookie.split(/=(.*)/s); cookieMap.set(name!, value!); }); return cookieMap;