aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-09-24 03:17:19 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-24 03:17:19 -0700
commit57010cc44883a5434276cee956bc84a0485d2f32 (patch)
treefe0a71f70c0273f4141bcf5fd1e4c994a4235496 /src
parentb6a4161cc5773c3ebf8222d38e9dfaf3d195f6a5 (diff)
downloadbun-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.zig2
-rw-r--r--src/string_immutable.zig36
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(