diff --git a/src/html/document.zig b/src/html/document.zig index 3aa946aa..19567078 100644 --- a/src/html/document.zig +++ b/src/html/document.zig @@ -90,8 +90,12 @@ pub const HTMLDocument = struct { return buf.items; } - pub fn set_cookie(_: *parser.DocumentHTML, arena: std.mem.Allocator, userctx: UserContext, cookie_str: []const u8) ![]const u8 { - const c = try Cookie.parse(arena, &userctx.url.uri, cookie_str); + pub fn set_cookie(_: *parser.DocumentHTML, userctx: UserContext, cookie_str: []const u8) ![]const u8 { + // we use the cookie jar's allocator to parse the cookie because it + // outlives the page's arena. + const c = try Cookie.parse(userctx.cookie_jar.allocator, &userctx.url.uri, cookie_str); + errdefer c.deinit(); + try userctx.cookie_jar.add(c, std.time.timestamp()); return cookie_str;