From 7bd9b75b2cc7ca58cfcd543ad912790c6c8678eb Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Fri, 23 Jan 2026 03:32:49 -0800 Subject: [PATCH] populate host field --- generate.ts | 4 ++-- url.zig | 9 ++++++--- zig-out/test.zig | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/generate.ts b/generate.ts index def3b9e6fab5c5f11368878f4b4111324a048c65..02792db6aebae732aa46ccf8d76109d28d028a73 100644 --- a/generate.ts +++ b/generate.ts @@ -52,7 +52,7 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin: try expect(u.password).toEqualString(password); try expect(u.hostname).toEqualString(hostname); try expect(u.port).toEqualString(port); - _ = host; + try expect(u.host).toEqualString(host); _ = origin; _ = pathname; try expect(u.search).toEqualString(search); @@ -75,7 +75,7 @@ pub fn parseIDNAPass(comptime input: []const u8, comptime output: []const u8) !v const u = try url.URL.parse(allocator, "https://" ++ input ++ "/x", null); defer allocator.free(u.href); try expect(u.hostname).toEqualString(output); - // assert_equals(url.host, idnaTest.output); + try expect(u.host).toEqualString(output); // assert_equals(url.pathname, "/x"); // assert_equals(url.href, 'https://{idnaTest.output}/x'); } diff --git a/url.zig b/url.zig index 8a044d748474e9732f18de8483be9dbfe622c63f..7e5b76e49f132130a469e4bb84b090b0cb7606b6 100644 --- a/url.zig +++ b/url.zig @@ -13,6 +13,7 @@ pub const URL = struct { hostname: []const u8, hostname_kind: HostKind = .name, port: []const u8, + host: []const u8, search: []const u8, hash: []const u8, @@ -399,6 +400,7 @@ pub const URL = struct { hostname_kind = h; buffer.clearRetainingCapacity(); state = .port; + try href.set(8, ":"); } // 3. Otherwise, if one of the following is true: // - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) @@ -800,11 +802,12 @@ pub const URL = struct { const url: URL = .{ .href = _href, .protocol = _href[0..extras.sum(usize, href.lengths[0..2])], - .username = _href[extras.sum(usize, href.lengths[0..2])..][0..href.lengths[3]], - .password = _href[extras.sum(usize, href.lengths[0..4])..][0..href.lengths[5]], + .username = _href[extras.sum(usize, href.lengths[0..3])..][0..href.lengths[3]], + .password = _href[extras.sum(usize, href.lengths[0..5])..][0..href.lengths[5]], .hostname = _href[extras.sum(usize, href.lengths[0..7])..][0..href.lengths[7]], .hostname_kind = hostname_kind, - .port = _href[extras.sum(usize, href.lengths[0..8])..][0..href.lengths[9]], + .port = _href[extras.sum(usize, href.lengths[0..9])..][0..href.lengths[9]], + .host = _href[extras.sum(usize, href.lengths[0..7])..][0..extras.sum(usize, href.lengths[7..][0..if (href.lengths[9] == 0) 1 else 3])], .search = if (href.lengths[12] == 0) "" else _href[extras.sum(usize, href.lengths[0..11])..][0..extras.sum(usize, href.lengths[11..][0..2])], .hash = if (href.lengths[14] == 0) "" else _href[extras.sum(usize, href.lengths[0..13])..][0..extras.sum(usize, href.lengths[13..][0..2])], }; diff --git a/zig-out/test.zig b/zig-out/test.zig index aca306161bb55c5919e1ca287482cff94395f7ea..157a065f0a204dafef6980f0f117ab3cfc0c5bd4 100644 --- a/zig-out/test.zig +++ b/zig-out/test.zig @@ -22,7 +22,7 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin: try expect(u.password).toEqualString(password); try expect(u.hostname).toEqualString(hostname); try expect(u.port).toEqualString(port); - _ = host; + try expect(u.host).toEqualString(host); _ = origin; _ = pathname; try expect(u.search).toEqualString(search); @@ -45,7 +45,7 @@ pub fn parseIDNAPass(comptime input: []const u8, comptime output: []const u8) !v const u = try url.URL.parse(allocator, "https://" ++ input ++ "/x", null); defer allocator.free(u.href); try expect(u.hostname).toEqualString(output); - // assert_equals(url.host, idnaTest.output); + try expect(u.host).toEqualString(output); // assert_equals(url.pathname, "/x"); // assert_equals(url.href, 'https://{idnaTest.output}/x'); } -- 2.54.0