From 84b1f3990c876e5b48f55cfc959c01cbc91ba2fa Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 3 Jun 2025 16:34:55 +0300 Subject: [PATCH] LibC: Fix getnameinfo How was i doing everything so wrong :D --- userspace/libraries/LibC/netdb.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/userspace/libraries/LibC/netdb.cpp b/userspace/libraries/LibC/netdb.cpp index dc7f5841fb..90d6407603 100644 --- a/userspace/libraries/LibC/netdb.cpp +++ b/userspace/libraries/LibC/netdb.cpp @@ -154,24 +154,31 @@ int getnameinfo(const struct sockaddr* __restrict sa, socklen_t salen, char* __r switch (sa->sa_family) { case AF_INET: + { if (salen < static_cast(sizeof(sockaddr_in))) return EAI_FAMILY; - if (service && snprintf(service, servicelen, "%d", reinterpret_cast(service)->sin_port) < 0) + const sockaddr_in* sa_in = reinterpret_cast(sa); + if (node && !inet_ntop(sa_in->sin_family, &sa_in->sin_addr, node, nodelen)) + return EAI_SYSTEM; + if (service && snprintf(service, servicelen, "%d", sa_in->sin_port) < 0) return EAI_SYSTEM; break; + } case AF_INET6: + { if (salen < static_cast(sizeof(sockaddr_in6))) return EAI_FAMILY; - if (service && snprintf(service, servicelen, "%d", reinterpret_cast(service)->sin6_port) < 0) + const sockaddr_in6* sa_in6 = reinterpret_cast(sa); + if (node && !inet_ntop(sa_in6->sin6_family, &sa_in6->sin6_addr, node, nodelen)) + return EAI_SYSTEM; + if (service && snprintf(service, servicelen, "%d", sa_in6->sin6_port) < 0) return EAI_SYSTEM; break; + } default: return EAI_FAIL; } - if (node && inet_ntop(sa->sa_family, sa, node, nodelen) == nullptr) - return EAI_SYSTEM; - return 0; }