From 8f71afc1bcb329553c391d9f7308792dacea9dfc Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Wed, 5 Aug 2015 06:31:45 +0000 Subject: 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 --- pjlib/src/pj/addr_resolv_sock.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'pjlib/src/pj') 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++; -- cgit v1.2.3