summaryrefslogtreecommitdiff
path: root/pjlib
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib')
-rw-r--r--pjlib/src/pj/addr_resolv_sock.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c
index fb730fd4..a844480d 100644
--- a/pjlib/src/pj/addr_resolv_sock.c
+++ b/pjlib/src/pj/addr_resolv_sock.c
@@ -129,6 +129,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
naddr = CFArrayGetCount(addrRef);
for (idx = 0; idx < naddr && i < *count; idx++) {
struct sockaddr *addr;
+ size_t addr_size;
addr = (struct sockaddr *)
CFDataGetBytePtr(CFArrayGetValueAtIndex(addrRef, idx));
@@ -143,9 +144,12 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
pj_ansi_strcpy(ai[i].ai_canonname, nodecopy);
/* Store address */
- PJ_ASSERT_ON_FAIL(sizeof(*addr) <= sizeof(pj_sockaddr),
- continue);
- pj_memcpy(&ai[i].ai_addr, addr, sizeof(*addr));
+ addr_size = sizeof(*addr);
+ if (af == PJ_AF_INET6) {
+ addr_size = addr->sa_len;
+ }
+ PJ_ASSERT_ON_FAIL(addr_size <= sizeof(pj_sockaddr), continue);
+ pj_memcpy(&ai[i].ai_addr, addr, addr_size);
PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr);
i++;