summaryrefslogtreecommitdiff
path: root/pjlib
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-08-05 06:31:45 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-08-05 06:31:45 +0000
commit8f71afc1bcb329553c391d9f7308792dacea9dfc (patch)
tree35f2336b1baa22f7644754aff99193f2b39aa80f /pjlib
parenta60d891a920bb9a97a1cd2a29e8d983345a08ece (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
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++;