diff options
author | Liong Sauw Ming <ming@teluu.com> | 2015-08-05 06:31:45 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2015-08-05 06:31:45 +0000 |
commit | 8f71afc1bcb329553c391d9f7308792dacea9dfc (patch) | |
tree | 35f2336b1baa22f7644754aff99193f2b39aa80f | |
parent | a60d891a920bb9a97a1cd2a29e8d983345a08ece (diff) |
Fixed #1874: Truncated IPv6 address during address lookup on iOS
Thanks to Brian Walker for the patch.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5146 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjlib/src/pj/addr_resolv_sock.c | 10 |
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++; |