Skip to content

Commit 7a3d2bf

Browse files
authored
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.
1 parent 6a3ae68 commit 7a3d2bf

1 file changed

Lines changed: 6 additions & 14 deletions

File tree

core/shared/platform/common/posix/posix_socket.c

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,14 @@ textual_addr_to_sockaddr(const char *textual, int port, struct sockaddr *out,
4444
}
4545

4646
static int
47-
sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
47+
sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr,
4848
bh_sockaddr_t *bh_sockaddr)
4949
{
5050
switch (sockaddr->sa_family) {
5151
case AF_INET:
5252
{
5353
struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr;
5454

55-
assert(socklen >= sizeof(struct sockaddr_in));
56-
5755
bh_sockaddr->port = ntohs(addr->sin_port);
5856
bh_sockaddr->addr_bufer.ipv4 = ntohl(addr->sin_addr.s_addr);
5957
bh_sockaddr->is_ipv4 = true;
@@ -65,8 +63,6 @@ sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen,
6563
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr;
6664
size_t i;
6765

68-
assert(socklen >= sizeof(struct sockaddr_in6));
69-
7066
bh_sockaddr->port = ntohs(addr->sin6_port);
7167

7268
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,
274270
}
275271

276272
if (src_addr && socklen > 0) {
277-
if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, socklen,
278-
src_addr)
273+
if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, src_addr)
279274
== BHT_ERROR) {
280275
return -1;
281276
}
@@ -411,9 +406,8 @@ os_socket_addr_resolve(const char *host, const char *service,
411406
continue;
412407
}
413408

414-
ret = sockaddr_to_bh_sockaddr(res->ai_addr,
415-
sizeof(struct sockaddr_in),
416-
&addr_info[pos].sockaddr);
409+
ret =
410+
sockaddr_to_bh_sockaddr(res->ai_addr, &addr_info[pos].sockaddr);
417411

418412
if (ret == BHT_ERROR) {
419413
freeaddrinfo(result);
@@ -1014,8 +1008,7 @@ os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr)
10141008
return BHT_ERROR;
10151009
}
10161010

1017-
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
1018-
sockaddr);
1011+
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
10191012
}
10201013

10211014
int
@@ -1031,6 +1024,5 @@ os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr)
10311024
return BHT_ERROR;
10321025
}
10331026

1034-
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, addr_len,
1035-
sockaddr);
1027+
return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr);
10361028
}

0 commit comments

Comments
 (0)