Skip to content

Commit c76240d

Browse files
waynezhangikskuh
authored andcommitted
fix: ipv6 parse in EndPoint
1 parent 8db1aa2 commit c76240d

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

network.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ pub const EndPoint = struct {
376376
port: u16, // Stored as native, will convert to bigEndian when moving to sockaddr
377377

378378
pub fn parse(string: []const u8) !EndPoint {
379-
const colon_index = std.mem.indexOfScalar(u8, string, ':') orelse return error.InvalidFormat;
379+
const colon_index = std.mem.lastIndexOfScalar(u8, string, ':') orelse return error.InvalidFormat;
380380

381381
const address = try Address.parse(string[0..colon_index]);
382382

testsuite.zig

+10-2
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,16 @@ test "parse + json parse" {
219219
\\{
220220
\\ "ipv4": "127.0.0.1",
221221
\\ "address": "10.0.0.1",
222-
\\ "endpoint": "8.8.4.4:53"
222+
\\ "endpoint": "8.8.4.4:53",
223+
\\ "ipv6_endpoint": "::1:53"
223224
\\}
224225
;
225226

226227
const Wrapper = struct {
227228
ipv4: network.Address.IPv4,
228229
address: network.Address,
229230
endpoint: network.EndPoint,
231+
ipv6_endpoint: network.EndPoint,
230232
};
231233

232234
const wrapper = try std.json.parseFromSliceLeaky(
@@ -242,6 +244,13 @@ test "parse + json parse" {
242244
.address = .{ .ipv4 = network.Address.IPv4.init(8, 8, 4, 4) },
243245
.port = 53,
244246
}, wrapper.endpoint);
247+
248+
var expected_addr = network.Address.IPv6.init(.{0} ** 16, 0);
249+
expected_addr.value[15] = 1;
250+
try std.testing.expectEqual(network.EndPoint{
251+
.address = .{ .ipv6 = expected_addr },
252+
.port = 53,
253+
}, wrapper.ipv6_endpoint);
245254
}
246255

247256
test "Darwin: connection-mode socket was connected already" {
@@ -285,7 +294,6 @@ test "Darwin: connection-mode socket was connected already" {
285294
}
286295
};
287296

288-
289297
var srv: Server = .{};
290298
try srv.start();
291299
defer srv.waitFinish();

0 commit comments

Comments
 (0)