Przeglądaj źródła

Fix os_socket_addr_resolve() for IPv6 (#2015)

The function always specified IPv4 socklen to sockaddr_to_bh_sockaddr(),
therefore the assertion was failing; however, sockaddr_to_bh_sockaddr()
never actually used socklen parameter, so we deleted it completely.
Marcin Kolny 2 lat temu
rodzic
commit
7a3d2bfab6
1 zmienionych plików z 6 dodań i 14 usunięć
  1. 6 14
      core/shared/platform/common/posix/posix_socket.c

+ 6 - 14
core/shared/platform/common/posix/posix_socket.c

@@ -44,7 +44,7 @@ textual_addr_to_sockaddr(const char *textual, int port, struct sockaddr *out,
 }
 
 static int
-sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
+sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr,
                         bh_sockaddr_t *bh_sockaddr)
 {
     switch (sockaddr->sa_family) {
@@ -52,8 +52,6 @@ sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
         {
             struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr;
 
-            assert(socklen >= sizeof(struct sockaddr_in));
-
             bh_sockaddr->port = ntohs(addr->sin_port);
             bh_sockaddr->addr_bufer.ipv4 = ntohl(addr->sin_addr.s_addr);
             bh_sockaddr->is_ipv4 = true;
@@ -65,8 +63,6 @@ sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
             struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr;
             size_t i;
 
-            assert(socklen >= sizeof(struct sockaddr_in6));
-
             bh_sockaddr->port = ntohs(addr->sin6_port);
 
             for (i = 0; i < sizeof(bh_sockaddr->addr_bufer.ipv6)
@@ -274,8 +270,7 @@ os_socket_recv_from(bh_socket_t socket, void *buf, unsigned int len, int flags,
     }
 
     if (src_addr && socklen > 0) {
-        if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, socklen,
-                                    src_addr)
+        if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, src_addr)
             == BHT_ERROR) {
             return -1;
         }
@@ -411,9 +406,8 @@ os_socket_addr_resolve(const char *host, const char *service,
                 continue;
             }
 
-            ret = sockaddr_to_bh_sockaddr(res->ai_addr,
-                                          sizeof(struct sockaddr_in),
-                                          &addr_info[pos].sockaddr);
+            ret =
+                sockaddr_to_bh_sockaddr(res->ai_addr, &addr_info[pos].sockaddr);
 
             if (ret == BHT_ERROR) {
                 freeaddrinfo(result);
@@ -1014,8 +1008,7 @@ os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr)
         return BHT_ERROR;
     }
 
-    return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
-                                   sockaddr);
+    return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
 }
 
 int
@@ -1031,6 +1024,5 @@ os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr)
         return BHT_ERROR;
     }
 
-    return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
-                                   sockaddr);
+    return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
 }