diff options
author | 2023-09-24 03:17:19 -0700 | |
---|---|---|
committer | 2023-09-24 03:17:19 -0700 | |
commit | 57010cc44883a5434276cee956bc84a0485d2f32 (patch) | |
tree | fe0a71f70c0273f4141bcf5fd1e4c994a4235496 /src | |
parent | b6a4161cc5773c3ebf8222d38e9dfaf3d195f6a5 (diff) | |
download | bun-57010cc44883a5434276cee956bc84a0485d2f32.tar.gz bun-57010cc44883a5434276cee956bc84a0485d2f32.tar.zst bun-57010cc44883a5434276cee956bc84a0485d2f32.zip |
Avoid using std.net.Address.parse (#5950)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/deps/c_ares.zig | 2 | ||||
-rw-r--r-- | src/string_immutable.zig | 36 |
2 files changed, 19 insertions, 19 deletions
diff --git a/src/deps/c_ares.zig b/src/deps/c_ares.zig index 3c86b0327..14fcb79e8 100644 --- a/src/deps/c_ares.zig +++ b/src/deps/c_ares.zig @@ -1252,7 +1252,7 @@ pub extern fn ares_set_servers_csv(channel: *Channel, servers: [*c]const u8) c_i pub extern fn ares_set_servers_ports_csv(channel: *Channel, servers: [*c]const u8) c_int; pub extern fn ares_get_servers(channel: *Channel, servers: *?*struct_ares_addr_port_node) c_int; pub extern fn ares_get_servers_ports(channel: *Channel, servers: *?*struct_ares_addr_port_node) c_int; -pub extern fn ares_inet_ntop(af: c_int, src: ?*const anyopaque, dst: [*c]u8, size: ares_socklen_t) [*c]const u8; +pub extern fn ares_inet_ntop(af: c_int, src: ?*const anyopaque, dst: [*c]u8, size: ares_socklen_t) ?[*:0]const u8; pub extern fn ares_inet_pton(af: c_int, src: [*c]const u8, dst: ?*anyopaque) c_int; pub const ARES_SUCCESS = 0; pub const ARES_ENODATA = 1; diff --git a/src/string_immutable.zig b/src/string_immutable.zig index 03ba35e66..8ecadad83 100644 --- a/src/string_immutable.zig +++ b/src/string_immutable.zig @@ -4676,30 +4676,30 @@ test "eqlCaseInsensitiveASCII" { } pub fn isIPAddress(input: []const u8) bool { - if (containsChar(input, ':')) - return true; + var max_ip_address_buffer: [512]u8 = undefined; + if (input.len > max_ip_address_buffer.len) return false; - if (comptime Environment.isWindows) { - return bun.todo(@src(), false); - } + var sockaddr: std.os.sockaddr = undefined; + @memset(std.mem.asBytes(&sockaddr), 0); + @memcpy(max_ip_address_buffer[0..input.len], input); + max_ip_address_buffer[input.len] = 0; - if (std.net.Address.resolveIp(input, 0)) |_| { - return true; - } else |_| { - return false; - } + var ip_addr_str: [:0]const u8 = max_ip_address_buffer[0.. :0]; + + return bun.c_ares.ares_inet_pton(std.os.AF.INET, ip_addr_str.ptr, &sockaddr) != 0 or bun.c_ares.ares_inet_pton(std.os.AF.INET6, ip_addr_str.ptr, &sockaddr) != 0; } pub fn isIPV6Address(input: []const u8) bool { - if (comptime Environment.isWindows) { - return bun.todo(@src(), false); - } + var max_ip_address_buffer: [512]u8 = undefined; + if (input.len > max_ip_address_buffer.len) return false; - if (std.net.Address.parseIp6(input, 0)) |_| { - return true; - } else |_| { - return false; - } + var sockaddr: std.os.sockaddr = undefined; + @memset(std.mem.asBytes(&sockaddr), 0); + @memcpy(max_ip_address_buffer[0..input.len], input); + max_ip_address_buffer[input.len] = 0; + + var ip_addr_str: [:0]const u8 = max_ip_address_buffer[0.. :0]; + return bun.c_ares.ares_inet_pton(std.os.AF.INET6, ip_addr_str.ptr, &sockaddr) != 0; } pub fn cloneNormalizingSeparators( |