Skip to content

Commit eae0795

Browse files
committed
fix: dns encoding storage_addr
1 parent e3a5369 commit eae0795

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/runtime/uv/dns.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,19 @@ extern "C" LEAN_EXPORT lean_obj_res lean_uv_dns_get_info(b_obj_arg name, b_obj_a
8181

8282
for (struct addrinfo* ai = res; ai != NULL; ai = ai->ai_next) {
8383
const struct sockaddr* sin_addr = (const struct sockaddr*)ai->ai_addr;
84-
in_addr_storage* storage_addr = (in_addr_storage*)sin_addr->sa_data;
84+
85+
in_addr_storage* storage_addr;
86+
87+
if (sin_addr->sa_family == AF_INET) {
88+
struct sockaddr_in* ipv4 = (struct sockaddr_in*)sin_addr;
89+
storage_addr = (in_addr_storage*)&(ipv4->sin_addr);
90+
} else if (sin_addr->sa_family == AF_INET6) {
91+
struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)sin_addr;
92+
storage_addr = (in_addr_storage*)&(ipv6->sin6_addr);
93+
} else {
94+
continue;
95+
}
96+
8597
lean_object* addr = lean_in_addr_storage_to_ip_addr((short)sin_addr->sa_family, storage_addr);
8698
arr = lean_array_push(arr, addr);
8799
}

0 commit comments

Comments
 (0)